tl; Dr.
java.time.Instant
UTC'de bir anı temsil eden standart ISO 8601 biçimindeki metni ayrıştırmak için sınıfı kullanın .
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Bu biçim, tarih-saat dizesi biçimleri için ISO 8601 standardı tarafından tanımlanır .
Her ikisi de:
… Dizeleri ayrıştırmak ve oluşturmak için varsayılan olarak ISO 8601 formatlarını kullanın.
Genelde eski java.util.Date /.Calendar & java.text.SimpleDateFormat sınıflarını kötü niyetli, kafa karıştırıcı ve kusurlu oldukları için kullanmaktan kaçınmalısınız . Birlikte çalışma için gerekirse, ileri geri dönebilirsiniz.
java.time
Java 8 ve sonraki sürümlerinde yerleşik olan yeni java.time çerçevesi. Esinlenerek Joda-Time , tarafından tanımlanan JSR 310 ve uzatıldı ThreeTen-Ekstra proje.
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
Eski sınıfa dönüştürün.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Saat dilimi
Gerekirse, bir saat dilimi atayabilirsiniz.
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.
Dönüştürmek.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Time
GÜNCELLEME: Joda-Time projesi şimdi bakım modunda. Ekip, java.time sınıflarına geçişi önerir .
İşte Joda-Time 2.8'deki bazı örnek kod.
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.
Eski sınıfa dönüştürün. JuDate'e bir saat dilimi atanamadığından, atanan saat diliminin dönüşümde kaybolduğunu unutmayın.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Saat dilimi
Gerekirse, bir saat dilimi atayabilirsiniz.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
Hakkında java.time
Java.time çerçevesi daha sonra Java 8 ve yerleşiktir. Bu sınıflar zahmetli eski yerini mirası gibi tarih-saat sınıfları java.util.Date
, Calendar
& SimpleDateFormat
.
Artık bakım modunda olan Joda-Time projesi java.time sınıflarına geçişi tavsiye ediyor .
Daha fazla bilgi için Oracle Eğiticisine bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
Sen değiştirebilir java.time sizin veritabanı ile doğrudan nesneleri. JDBC 4.2 veya sonraki bir sürümüyle uyumlu bir JDBC sürücüsü kullanın . Dizeye gerek yok, sınıflara gerek yok .java.sql.*
Java.time sınıflarını nereden edinebilirsiniz?
- Java SE 8 , Java SE 9 ve üstü
- Dahili.
- Paketlenmiş bir uygulamaya sahip standart Java API'sinin bir parçasıdır.
- Java 9 bazı küçük özellikler ve düzeltmeler ekler.
- Java SE 6 ve Java SE 7
- Android
- Android'in sonraki sürümleri java.time sınıflarının uygulamalarını bir araya getirir.
- Önceki Android (<26) için, ThreeTenABP projesi , ThreeTen-Backport'u (yukarıda bahsedilmiştir) uyarlar . Bkz . ThreeTenABP nasıl kullanılır… .
ThreeTen-Ekstra proje ek sınıfları ile java.time uzanır. Bu proje, java.time'a gelecekteki olası eklemeler için bir kanıt zeminidir. Burada bazı yararlı sınıfları gibi bulabilir Interval
, YearWeek
, YearQuarter
, ve daha .