2016-07-09 7 views
3

Ich habe dieses Datum:So parsen Sie die Zeitzone mit einem einstelligen Offset? "Wed Dec 31 00:00:00 GMT-8 1969"

"Wed Dec 31 00:00:00 GMT-8 1969" 

Aber es kann nicht mit diesem Simple analysiert werden:

new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); 

Wie gebe ich die -8 in der Formatzeichenfolge? Ich habe versucht Z und X nach dem Lesen der SDF-Dokumente, aber ohne Erfolg. Was soll ich verwenden?

+0

Achtung: Die Verwendung einer einstelligen Ziffer für [Offset-from-UTC] (https://en.wikipedia.org/wiki/UTC_offset) ist ** nicht Standard ** ([ISO 8601] (https: // en.wikipedia.org/wiki/ISO_8601)). Wird Probleme mit verschiedenen Bibliotheken und Protokollen verursachen, die zweistellige Werte mit Füllgrad Null für einstellige Werte erwarten. –

Antwort

3

Die Verwendung von -8 ist in einem Nicht-ISO-Standardformat.

Etwas wie -0800 oder -08:00 wird erwartet. Dies liegt daran, dass der Zeitversatz halbe Stunden umfassen kann.

Sie sollten eine Vorverarbeitung Umwandlung auf der Schnur laufen, bevor es dem Simple vorbei und es "Wed Dec 31 00:00:00 GMT-0800 1969" und Verwendung ändern:

new SimpleDateFormat("EEE MMM dd hh:mm:ss Z yyyy");

Wenn Sie es einfacher erstellen Sie einfach eine Methode machen wollen ersetzen die -8 mit und ZZZ verwenden.

+0

Dies funktioniert als die Vorverarbeitung Umwandlung: 's = replaceFirst (" ([\\ - \\ +]) (\\ d) \\ b (?! :) "," $ 10 $ 200 "). ReplaceFirst (" ([\\ - \\ +)) (\\ d \\ d) \\ b (?! :) "," $ 1 $ 200 ");'. Es behandelt - oder + gefolgt von 1 oder 2 Ziffern, hinterlässt aber Sequenzen von 3 oder mehr Ziffern sowie Sequenzen gefolgt von ':'. – ajb

1

Wenn Sie Java verwenden 8 können Sie DateTimeFormatter mit einem Muster von "EEE MMM d HH:mm:ss O yyyy" mag versuchen:

String date = "Wed Dec 31 00:00:00 GMT-8 1969"; 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM d HH:mm:ss O yyyy"); 
    LocalDateTime dateTime = LocalDateTime.parse(date, formatter); 

O repräsentieren lokalisierte Zone-Offset und kann Zone wie GMT Offset-Format + 8, GMT + 08: 00 , UTC-08: 00. Sie können Offset O in DateTimeFormatter für weitere Details sehen.