Ist java.Zeit scheitern zu analysieren Bruchteil-der-Sekunde?

Mit dem ersten release von Java 8 (b132) auf Mac OS X (Mavericks), diesen code mit der neuen java.Zeit-Paket funktioniert:

String input = "20111203123456"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );

Rendering:

2011-12-03T12:34:56

Aber wenn ich "SS" für Bruchteil-der-Sekunde (und "55" als Eingabe), wie angegeben, in der DateTimeFormatter-Klasse doc, wird eine Ausnahme geworfen:

java.time.format.DateTimeParseException: Text '2011120312345655' could not be parsed at index 0

Der doc sagt Strict-Modus wird standardmäßig verwendet und erfordert die gleiche Anzahl der format-Zeichen als Eingabe Ziffern. Also ich bin verwirrt, warum dieser code nicht:

String input = "2011120312345655"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );

Weiteres Beispiel der Verwendung Beispiel aus der Dokumentation ("978") (schlägt fehl):

String input = "20111203123456978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );

Dieses Beispiel funktioniert, indem ein Komma (, aber ich finde keine solche Anforderung in der doc):

String input = "20111203123456.978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );

Macht:

localDateTime: 2011-12-03T12:34:56.978

Weglassen der Periode den Charakter von entweder den input-string oder das format verursachen scheitern.

Ausfällt:

String input = "20111203123456.978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );

Ausfällt:

String input = "20111203123456978"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS");
LocalDateTime localDateTime = LocalDateTime.parse( input, formatter );
Dieser Bruchteil ist nano-Sekunde. Können Sie versuchen mit 9 Ziffern? Obwohl die Lektüre der Dokumente, es sollte gearbeitet haben, mit weniger als 9 Ziffern, so lange, wie das Muster mit der Anzahl der Ziffern.
Nach re-Lektüre der Dokumente, können Sie versuchen, indem ein Komma nach dem Sekunden-Feld? Wie 20111203123456.978?
Hinzufügen eines dezimal-Punkt macht es Arbeit. Siehe Ergänzung unten die Frage. Aber können Sie mir so eine Voraussetzung bei der doc? ich bin versucht zu bestimmen, wenn ich sein Einreichung einen Fehlerbericht.
Erstens, gut, dass es für Sie gearbeitet. Zweitens, ich hatte nicht gesehen, dass es speziell geschrieben, sondern mehr wie meine interpretation der Bruchteil einer Sekunde. Einen Bruchteil der Sekunde vorangestellt werden soll eine Dezimalzahl. Es macht keinen Sinn, nicht mit Nachkommastellen. Um einen Vergleich mit der Zeit HH:mm:ss Doppelpunkt wird normalerweise verwendet, als Trennzeichen, aber es ist nicht Teil des Feldes. Daher Doppelpunkt ist nicht erforderlich, da es nicht Teil des Felds. Aber den Bruchteil einer Sekunde ist ein Teil des Sekunden Felds. So sollte es sein, getrennt durch eine Dezimalzahl. Das ist, wie ich intepret. Aber fühlen Sie sich frei, melden Sie einen bug-Bericht, wenn Sie immer noch denke, es ist ein bug.
eines der großen Probleme ist, dass die SE-tag-system nicht berücksichtigt . in der gleichen Weise, es hält andere Satzzeichen. Menschen auf der Suche nach java-time sind nicht zu sehen java.time, und es gibt ein schrecklich - mix von tags in verschiedenen Orten, verwenden Sie eine statt des anderen. Wenn Sie denken, dass der tag mit der Zeit werden mehr hilfreich, dann lassen Sie uns völlig auslöschen den anderen tag zu löschen, die Mehrdeutigkeit.

InformationsquelleAutor Basil Bourque | 2014-03-23

Schreibe einen Kommentar