Sie könnten der Java 8 verwenden time
Paket:
String input = "11/23/2017 09:44am";
String format = "MM/dd/yyyy hh:mma";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDateTime date = LocalDateTime.parse(input, formatter);
System.out.printf("%s%n", date);
Aber das Problem ist: Diese wirft eine DateTimeParseException
, wegen der Kleinschreibung "am".
Ich schaute in der Dokumentation, aber ich konnte keine Standardmethode zum Parsen von Kleinbuchstaben "am" oder "pm" als Meridiem Bezeichner .
You'll end up manually replacing them:
input = input.replace("AM", "am").replace("PM","pm");
Wie @OleVV in den Kommentaren erwähnt, können Sie einen DateTimeFormatterBuilder
und angeben, dass das Parsen Groß- und Kleinschreibung sein sollte:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern(format)
.toFormatter();
Dann können Sie Verwenden Sie diesen Formatierer als Argument für die Methode LocalDateTime.parse
.
Eine andere Antwort der zuvor genannten Post provides a solution, wo Sie die AM/PM-Symbole mit den Kleinbuchstaben Varianten überschreiben können.
Interessanterweise ist die SimpleDateFormat
tut Unterstützung der Analyse von Klein am/pm.
sollte dies tun. - DateTimeFormatter.ofPattern ("MM/TT/JJJJ hh: mm a"); –
@priyadarshiswain "M" für Monat im Jahr, während "m" für "Minute in Stunde" – suvartheec
Mögliches Duplikat von [Java8 DateTimeFormatter am/pm] (https://stackoverflow.com/questions/38250379/java8-datetimeformatter-am- pm). Ich weiß, dass Sie gebeten haben, die Frage nicht als Duplikat zu betrachten, setzen Sie die verknüpfte Frage auch in Kleinbuchstaben, und die akzeptierte Antwort löst das, so dass ich nicht verstehe, warum nicht. –