Tl;dr
Instant.now()
.toString()
2016-05-06T23:24:25.694Z
ZonedDateTime
.now
(
ZoneId.of( "America/Montreal" )
)
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME )
.replace( "T" , " " )
2016-05-06 19:24:25.694
java.time
In Java 8 und später haben wir die java.time Framework, das in Java 8 und höher integriert ist. Diese neuen Klassen ersetzen die lästigen alten java.util.Date/.Calendar-Klassen. Die neuen Klassen sind inspiriert von der sehr erfolgreichen Joda-Time Framework, das als sein Nachfolger gedacht ist, vom Konzept her ähnlich, aber mit einer neuen Architektur. Definiert von JSR 310 . Erweitert um den DreiZehn-Extra Projekt. Siehe die Tutorial .
Beachten Sie, dass java.time in der Lage ist Nanosekunde Auflösung (9 Dezimalstellen im Sekundenbruchteil), gegenüber der Millisekunde Auflösung (3 Dezimalstellen) von java.util.Date & Joda-Time. Wenn Sie also so formatieren, dass nur 3 Dezimalstellen angezeigt werden, könnten Sie Daten verstecken.
Wenn Sie Mikro- oder Nanosekunden aus Ihren Daten entfernen möchten, kürzen Sie diese.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Die java.time-Klassen verwenden ISO 8601 Format beim Parsen/Erzeugen von Zeichenketten. A Z
am Ende ist die Abkürzung für Zulu
und bedeutet UTC .
Eine Instant
stellt einen Zeitpunkt auf der Zeitachse in UTC mit einer Auflösung von bis zu Nanosekunden . Den aktuellen Moment einfangen in Java 8 ist begrenzt auf Millisekunden mit einer neuen Implementierung in Java 9, die abhängig von den Fähigkeiten der Hardware-Uhr Ihres Computers bis zu Nanosekunden erfasst.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23:24:25.694Z
Ersetzen Sie die T
in der Mitte mit einem Leerzeichen, und die Z
mit nichts, um das gewünschte Ergebnis zu erzielen.
String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course.
2016-05-06 23:24:25.694
Da Sie sich nicht um die Angabe des Offsets oder der Zeitzone kümmern, erstellen Sie eine "lokale" Datumszeit ohne Bezug zu einem bestimmten Ort.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Joda-Time
Die sehr erfolgreiche Joda-Time Bibliothek war die Inspiration für das java.time Framework. Es ist ratsam, auf java.time zu migrieren, wenn dies sinnvoll ist.
El ISO 8601 Format enthält Millisekunden und ist der Standard für die Joda-Time 2.4 Bibliothek.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Wenn es läuft
Now: 2013-11-26T20:25:12.014Z
Bei Bedarf können Sie auch den Bruchteil einer Millisekunde als Zahl angeben:
int millisOfSecond = myDateTime.getMillisOfSecond ();
37 Stimmen
Wenn alles andere versagt, lesen Sie die Dokumentation .
6 Stimmen
Zu Ihrer Information: Die lästigen alten Datum-Zeit-Klassen wie
java.util.Date
,java.util.Calendar
yjava.text.SimpleTextFormat
sind jetzt Erbe , ersetzt durch die java.time Klassen. Siehe Anleitung von Oracle .