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
W Javie 8 i nowszych mamy framework java.time wbudowany w Javę 8 i później. Te nowe klasy zastępują kłopotliwe stare klasy java.util.Date/.Calendar. Nowe klasy inspirowane są bardzo udanym frameworkiem Joda-Time , przeznaczonym jako jego następca, podobnym w koncepcji, ale przebudowanym. Zdefiniowane przez JSR 310 . Rozszerzony o projekt ThreeTen-Extra . Zobacz samouczek .
Należy pamiętać, że java.time jest zdolny do rozdzielczości nanosekundowej (9 miejsc dziesiętnych w ułamku sekundy), w porównaniu do rozdzielczości milisekundowej (3 miejsca dziesiętne) zarówno java.util.Date & Joda-Time. Dlatego podczas formatowania w celu wyświetlenia tylko 3 miejsc po przecinku możesz ukrywać dane.
Jeśli chcesz wyeliminować z danych jakieś mikrosekundy lub nanosekundy, obetnij.
Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ;
Klasy java.time domyślnie używają formatu ISO 8601 podczas parsowania / generowania ciągów. A Z
na końcu jest skrótem od Zulu
i oznacza UTC .
An Instant
reprezentuje moment na osi czasu w UTC z rozdzielczością do nanosekund . Uchwycenie bieżącego momentu w Javie 8 jest ograniczone do milisekund , a nowa implementacja w Javie 9 przechwytuje do nanosekund w zależności od możliwości zegara sprzętowego komputera.
Instant instant = Instant.now (); // Current date-time in UTC.
String output = instant.toString ();
2016-05-06T23: 24: 25.694Z
Zamień T
środek na spację, a na Z
nic, aby uzyskać pożądaną wydajność.
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
Ponieważ nie chcesz uwzględniać przesunięcia ani strefy czasowej, ustaw „lokalną” datę i czas niezwiązaną z żadną konkretną lokalizacją.
String output = LocalDateTime.now ( ).toString ().replace ( "T", " " );
Joda-Time
Bardzo popularna biblioteka Joda-Time była inspiracją dla frameworku java.time. Zaleca się migrację do java.time, gdy jest to wygodne.
Format ISO 8601 obejmuje milisekundy i jest domyślny dla biblioteki Joda-Time 2.4.
System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) );
Po uruchomieniu…
Now: 2013-11-26T20:25:12.014Z
Możesz też poprosić o ułamek sekundy w milisekundach, jeśli to konieczne:
int millisOfSecond = myDateTime.getMillisOfSecond ();