java.time
Lösung mit java.time
die moderne Datum-Zeit-API :
Die moderne Datums-Zeit-API bietet OffsetDateTime
um ein Datum-Zeit-Objekt mit einem Zeitzonen-Offset darzustellen. Es kann konvertiert werden in Instant
der einen momentanen Punkt auf der Zeitachse darstellt. Eine Instant
ist unabhängig von der Zeitzone, d. h. sie hat einen Zeitzonen-Offset von +00:00
Stunden, bezeichnet als Z
dans le ISO 8601 Normen.
Instant#toEpochMilli
wandelt diesen Zeitpunkt in die Anzahl der Millisekunden ab der Epoche 1970-01-01T00:00:00Z um. Dieser Wert kann in ein Objekt von GregorianCalendar
die dann denselben Zeitpunkt darstellen.
Demo:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "Mon, 27 Oct 2008 08:33:29 -0700";
OffsetDateTime odt = OffsetDateTime.parse(strDateTime, DateTimeFormatter.RFC_1123_DATE_TIME);
System.out.println(odt);
// In case you want a time zone neutral object, convert to Instant
Instant instant = odt.toInstant();
System.out.println(instant);
// Edit: If the requirement is a GregorianCalendar having the offset from
// the string — typically for an old API not yet upgraded to java.time:
ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, DateTimeFormatter.RFC_1123_DATE_TIME);
GregorianCalendar gc = GregorianCalendar.from(zdt);
System.out.println("As Date: " + gc.getTime());
System.out.println("Time zone ID: " + gc.getTimeZone().getID());
System.out.println("Hour of day: " + gc.get(Calendar.HOUR_OF_DAY));
// ...
}
}
Ausgabe:
2008-10-27T08:33:29-07:00
2008-10-27T15:33:29Z
As Date: Mon Oct 27 15:33:29 GMT 2008
Time zone ID: GMT-07:00
Hour of day: 8
Aufruf von getTime()
en el GregorianCalendar
wandelt sich in eine Date
(eine weitere alte und fehleranfällige Klasse), die keine Zeitzone hat, so dass der Offset verloren geht. Das Ausdrucken der Zeitzonen-ID und der Tageszeit zeigt, dass sowohl der Zeitversatz als auch die Tageszeit in der Klasse GregorianCalendar
.
Erfahren Sie mehr über die moderne Datums-Zeit-API von Pfad: Datum Uhrzeit .
* Wenn Sie aus irgendeinem Grund bei Java 6 oder Java 7 bleiben müssen, können Sie DreiZehn-Backport das den größten Teil der java.time Funktionalität für Java 6 und 7. Wenn Sie an einem Android-Projekt arbeiten und Ihr Android-API-Level noch nicht mit Java-8 übereinstimmt, prüfen Sie Java 8+ APIs verfügbar durch Desugaring et Wie man ThreeTenABP in einem Android-Projekt verwendet .