tl; dr
Instant.parse ("2010-04-05T17:16:00Z")
ISO 8601 Standardowy
ciąg jest zgodny ze standardem (którego ISO 8601 wspomniany RFC 3339 jest profilem).
Unikać j.u.Date
W java.util.Date i .Calendar klasy wiązane z Java są notorycznie kłopotliwe. Unikaj ich.
Zamiast tego należy użyć biblioteki Joda-Time lub nowego pakietu java.time w języku Java 8. Obie metody używają ISO 8601 jako domyślnego do analizowania i generowania reprezentacji ciągów wartości daty i godziny.
java.time
java.time ramy wbudowany w Java 8 i później wypiera kłopotliwe starych klas java.util.Date/.Calendar. Nowe klasy zostały zainspirowane cieszącym się dużym powodzeniem frameworkem Joda-Time, który ma być jego następcą, podobnym do koncepcji, ale zmienionym na nowo. Zdefiniowany przez JSR 310. Rozszerzony o projekt ThreeTen-Extra. Zobacz Tutorial.
Klasa Instant
w java.time reprezentuje moment na osi czasu w strefie czasowej UTC.
Na końcu wprowadzanego ciągu znaków Zulu
oznacza UTC
. Taki ciąg może być bezpośrednio przetwarzany przez klasę Instant
, bez konieczności określania formatyzatora.
String input = "2010-04-05T17:16:00Z";
Instant instant = Instant.parse (input);
Zrzut na konsolę.
System.out.println ("instant: " + instant);
natychmiastowy: 2010-04-05T17: 16: 00Z
Stamtąd można zastosować strefę czasową (ZoneId
), aby dostosować ten Instant
do ZonedDateTime
. Przeszukaj przepełnienie stosu w celu omówienia i przykłady.
Jeśli musisz użyć obiektu java.util.Date
, możesz przekonwertować, wywołując nowe metody konwersji dodane do starych klas, na przykład metodę statyczną java.util.Date.from(Instant)
.
java.util.Date date = java.util.Date.from(instant);
Joda czasie
przykład w Joda-Time 2.5.
Konwertuj na UTC.
DateTime dateTimeUtc = dateTime.withZone(DateTimeZone.UTC);
Konwertuj na java.util.Date, jeśli to konieczne.
java.util.Date date = dateTime.toDate();
Sufiks "Z" w sygnaturze czasowej nie powinien mylić z Z lub z we wzorze. W języku Java 7 można przeanalizować sufiks ISO8601 za pomocą SimpleDateFormat, używając litery wzoru "X". –
FYI, kłopotliwe stare klasy czasu i daty, takie jak 'SimpleTextFormat' są teraz [starszeństwem] (https://en.wikipedia.org/wiki/Legacy_system), wypierane przez [java.time] (https: // docs .oracle.com/javase/8/docs/api/java/time/package-summary.html). Zobacz [Tutorial by Oracle] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html). –