2017-12-31 128 views
-2

Ich habe einen Zeitstempel, die ich über ein String in folgendem Format angezeigt:Java 8 Local - Wie 0,000 Millisekunden in String Umwandlung halten

2016-10-17T12: 42: 04.000

ich Umwandlung in ein LocalDateTime einige Tage, um es hinzuzufügen (dann zurück zu einem String) über die folgende Zeile ein:

String _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000", 
    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")).minusDays(120).toString()); 

Howev ähm, mir ist aufgefallen, dass die Antwort die .000 Millisekunden zurückgibt.

Ich bin mir nicht sicher, der sauberste Weg, um sicherzustellen, dass das genaue Muster erhalten bleibt. Im Moment füge ich nur eine einzige Millisekunde hinzu, und es gibt wahrscheinlich eine Möglichkeit, das alte SimpleDateFormat darin einzubauen, aber ich hatte gehofft, dass es einen noch besseren Weg gibt.

+2

Verwenden Sie den gleichen DateTimeFormatter, um Ihre LocalDateTime zu formatieren, anstatt toString() aufzurufen. –

Antwort

5

LocalDateTime::toString auslässt, wenn Teile Null:

Das Format verwendet wird, wird die kürzeste sein, der den vollen Wert der Zeit ausgibt, in der die Teile weggelassen implizierte sind Null.

Verwenden Sie LocalDateTime::format anstatt sich auf toString() zu verlassen.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
LocalDateTime _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000", formatter).minusDays(120); 

// This just uses default formatting logic in toString. Don't rely on it if you want a specific format. 
System.out.println(_120daysLater.toString()); 

// Use a format to use an explicitly defined output format 
System.out.println(_120daysLater.format(formatter));