Immer aktuelle Zeit in Java 8
Ich bin erkunden die neue java.time API von Java 8. Ich bin besonders beim abrufen der aktuellen Zeit (meine aktuelle Zeit-zone, einer anderen Zeitzone und einem anderen offset).
Der code ist:
public static void getCurrentLocalTime(){
LocalTime time = LocalTime.now();
System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());
System.out.println("Current local time : " + time);
}
public static void getCurrentTimeWithTimeZone(){
LocalDateTime localtDateAndTime = LocalDateTime.now();
ZoneId zoneId = ZoneId.of("America/Los_Angeles");
ZonedDateTime dateAndTimeInLA = ZonedDateTime.of(localtDateAndTime, zoneId);
String currentTimewithTimeZone =dateAndTimeInLA.getHour()+":"+dateAndTimeInLA.getMinute();
System.out.println("Current time in Los Angeles: " + currentTimewithTimeZone);
}
public static void getCurrentTimeWithZoneOffset(){
LocalTime localtTime = LocalTime.now();
ZoneOffset offset = ZoneOffset.of("-08:00");
OffsetTime offsetTime = OffsetTime.of(localtTime, offset);
String currentTimewithZoneOffset =offsetTime.getHour()+":"+offsetTime.getMinute();
System.out.println("Current time with offset -08:00: " + currentTimewithZoneOffset);
}
Aber, wenn ich Methoden aufrufen, bekomme ich die gleiche Zeit-von-Tag (meine system-Zeit), das ist natürlich nicht das, was ich erwarte.
Die Ausgabe der Methode Aufrufe:
Current time in Los Angeles: 19:59
Local Time Zone: Asia/Calcutta
Current local time : 19:59:20.477
Current time with offset -08:00: 19:59
Selbst nach der Einstellung einer anderen Zeitzone und offset, warum bin ich immer die gleiche Zeit?
InformationsquelleAutor der Frage user2693135 | 2015-10-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
LocalDateTime.now()
gibt immer das aktuelle Datum/Uhrzeit in Ihrer Zeitzone (sagen 13 Oktober @ 11.20 Uhr in London). Beim erstellen einerZonedDateTime
oderOffsetTime
aus einem bestimmtenZoneId
oderZoneOffset
erhalten Sie das gleiche Datum und die Zeit, aber in einer anderen Zeitzone (zum Beispiel 13 Oktober um 11.20 Uhr in Los Angeles), die für einen anderen Augenblick in der Zeit.Sind Sie wahrscheinlich auf der Suche nach etwas wie:
Diese berechnet das aktuelle Datum und die Uhrzeit in Los Angeles: 13. Oktober, 3.20 Uhr.
InformationsquelleAutor der Antwort assylias
Betrachten Sie die folgenden festgelegten Methoden:
Was sich geändert hat ist, dass anstelle der Berufung
now()
wird der Aufruf annow(zone)
. Das ist, weilnow()
immer wieder die aktuelle system-Zeit in Ihrer Zeitzone. Die AufrufeatZone
OffsetTime.of
oderZoneDateTime.of
nicht ändern, Datum/Uhrzeit, es sagt nur Java-Zeit, sollte der Zeitpunkt verstanden werden, an ein Datum/Uhrzeit in dieser Zeitzone.Beim Aufruf dieser 3 Methoden, hier ist die Ausgabe auf meinem Rechner:
Machen dies sehr deutlich: du bist in Europa und rufen
LocalDateTime.now().atZone(ZoneId.of("America/Los_Angeles"))
- erstellen Sie eine Datum/Uhrzeit stellt die aktuelle Zeit in Europa, als würden Sie sich in Los Angeles, so erstellen Sie eine Datums - /Zeit-was ist eigentlich in die Zukunft für Los Angeles Bewohner (8 oder 9 Stunden in der Zukunft, je nach DST).InformationsquelleAutor der Antwort Tunaki
Es gibt auch eine andere Art der Darstellung der Zeit in einer anderen zone durch die Verwendung
withZoneSameInstant
:InformationsquelleAutor der Antwort mlewandowski