java.Zeit DateTimeFormatter-Muster für timezone offset
Ich versuche zu analysieren: 2014-05-02-10.45.05.993280-5:00
wo die -5:00
ist der offset von UTC. Verwendung von java.Zeit DateTimeFormatter
in Java 8.
Für das erste bit habe ich Folgendes: yyyy-MM-dd-HH.mm.ss.SSSSSS
jedoch kann ich nicht herausfinden, was das Muster sein sollte, um eine Analyse der offset auch.
Wenn ich den offset mit 4 Ziffern (-05:00), die ich verwenden könnte: yyyy-MM-dd-HH.mm.ss.SSSSSSxxx
, aber dies funktioniert nicht bei 3 stellen.
Irgendwelche Ideen?
InformationsquelleAutor Cheetah | 2015-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie Großbuchstaben X anstelle von x, also XXX. Der Unterschied ist, dass big X kann erkennen, den Eingang Buchstaben "Z" als UTC-Offset +00:00 während kleine Muster Buchstaben X nicht.
Vorgeschlagenen Muster:
Bitte seien Sie sich bewusst von folgenden JDK-bug:
UPDATE:
Habe ich jetzt getestet, die beschriebene Problemumgehung im Fehler-log.
Aber es gibt eine Ausnahme:
So nachsichtig analysieren hilft auch nicht. So gibt es jetzt nur noch drei Optionen, die Links für Sie:
Verwenden Sie die Problemumgehung vorgeschlagen von bug-reporter: [...] Problemumgehung ist, um eine Analyse der Datum/Zeit einzeln, verwenden Sie eine hand-codiert-parser für die offset-und kombinieren die LocalDateTime mit der hand analysiert offset. Nicht einfach umgehen.
Versuchen, Ihre eigenen, spezialisierten string-Vorverarbeitung. Wenn Sie ein festes format haben, dann können Sie versuchen, legen Sie die null-Ziffer an position 26 (wenn der Gesamt-input-Länge ist eine Zahl zu klein).
Oder Sie verwenden eine externe Bibliothek, die dies tun können. Meine Bibliothek Time4J (v4.0) kann das tun, wenn Sie bereit sind, fügen Sie eine zusätzliche Abhängigkeit. Sehen Sie diesen code:
String input = "2014-05-02-10.45.05.993280-5:00";
ZonalDateTime zdt =
ZonalDateTime.parse(
input,
Moment.localFormatter("yyyy-MM-dd-HH.mm.ss.SSSSSSXXX", PatternType.CLDR));
System.out.println(zdt); //2014-05-02T10:45:05,993280UTC-05:00
ZonedDateTime result = zdt.toTemporalAccessor();
Update: Nach JDK-bug-status, der Fehler wurde behoben für Java-9, aber ein backport für Java-8 scheint nicht verfügbar zu sein, obwohl.
Du hast Recht. Tut mir Leid, dass Sie leiden unter dem bug. Siehe bitte auch mein update, wenn Sie können jede der alternativen workarounds.
InformationsquelleAutor Meno Hochschild
Offset für
SimpleDateFormat
Zeichen istZ
überprüfenJava7
oderJava8
SimpleDateFormat API
.Dann, Ihre parser-format für
String
werden müssen:
UPDATE: für
DateTimeFormatter
den offset Muster für die Formatierung und Parsing - sind:Ihre gewünschten Muster in
DateTimeFormatter
istX
.DateTimeFormatter
und das hinzufügen einerZ
nicht angezeigt ot-ArbeitSie im Zusammenhang mit Java 7 zweimal. Java 8 API ist hier.
Ich habe versucht, Variationen und cant get Sie auf drucken, um das format "+00:00" auf GMT-Zeit. Es wird nur drucken "+0000" ein . Auf der anderen Seite, wenn die Zeitzone offset von mindestens 1, dann DateTimeFormatter.ISO_OFFSET_DATE_TIME drucken der ehemaligen gewünschte Muster.
InformationsquelleAutor Jordi Castilla