tl; dr
Użyj java.time.Instant
klasy do parsowania tekstu w standardowym formacie ISO 8601, reprezentującym chwilę w UTC.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Ten format jest zdefiniowany przez normę ISO 8601 dla formatów ciągów daty i godziny.
Obie:
… Domyślnie używają formatów ISO 8601 do analizowania i generowania ciągów.
Ogólnie powinieneś unikać korzystania ze starych klas java.util.Date /.Calendar & java.text.SimpleDateFormat, ponieważ są one wyjątkowo kłopotliwe, mylące i wadliwe. Jeśli jest to wymagane do współpracy, możesz konwertować do iz powrotem.
java.time
Zbudowana w Javie 8 i nowszych jest nowa platforma java.time . Zainspirowany przez Joda-Time , zdefiniowany przez JSR 310 i rozszerzony przez projekt ThreeTen-Extra .
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
Przejdź do starej klasy.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Strefa czasowa
W razie potrzeby możesz przypisać strefę czasową.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
Konwertować.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Time
AKTUALIZACJA: Projekt Joda-Time jest teraz w trybie konserwacji. Zespół doradza migrację do klas java.time .
Oto przykładowy kod w Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
Konwertuj na starą klasę. Pamiętaj, że przypisana strefa czasowa jest tracona podczas konwersji, ponieważ juDate nie można przypisać strefy czasowej.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Strefa czasowa
W razie potrzeby możesz przypisać strefę czasową.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
O java.time
Środowisko java.time jest wbudowane w Javę 8 i nowsze wersje . Klasy te kłopotliwe zastąpić stary starszych klas Date-Time, takich jak java.util.Date
, Calendar
, i SimpleDateFormat
.
Projekt Joda-Time , teraz w trybie konserwacji , zaleca migrację do klas java.time .
Aby dowiedzieć się więcej, zobacz samouczek Oracle . I przeszukaj stos przepełnienia dla wielu przykładów i wyjaśnień. Specyfikacja to JSR 310 .
Możesz wymieniać obiekty java.time bezpośrednio ze swoją bazą danych. Użyj sterownika JDBC zgodnego z JDBC 4.2 lub nowszym. Nie potrzeba ciągów, nie ma potrzeby java.sql.*
klas.
Gdzie można uzyskać klasy java.time?
Projekt ThreeTen-Extra rozszerza java.time o dodatkowe klasy. Ten projekt jest poligonem doświadczalnym dla ewentualnych przyszłych dodatków do java.time. Można znaleźć kilka przydatnych klas tutaj takie jak Interval
, YearWeek
, YearQuarter
, i więcej .