tl; dr
Instant.now()
java.time
Java'nın en eski sürümleriyle birlikte gelen zahmetli eski tarih-saat sınıflarının yerini , Java 8 ve sonraki sürümlerde yerleşik olan java.time sınıfları almıştır . Oracle Eğitimine bakın . Çok işlevsellik içinde Java 6 ve 7 geri-taşındıktan ThreeTen-backport ve ayrıca içinde Android'e uyarlanmıştır ThreeTenABP .
Instant
An , nanosaniyeye kadar çözünürlükle UTC'deInstant zaman çizelgesindeki bir anı temsil eder .
Instant instant = Instant.now();
toStringYöntemi standart birini kullanarak tarih zaman değerini temsil eden metin ile bir String nesnesi yaratır , ISO 8601 biçimleri.
String output = instant.toString();
2016-06-27T19: 15: 25,864Z
InstantSınıf java.time bir temel yapı bloğu sınıftır. Genel olarak en iyi uygulama, UTC'de tarih-saat değerlerini izlemek, saklamak ve değiştirmek olduğu için, tarih-saati ele alırken bu sınıfınız olmalıdır.
OffsetDateTime
Ancak Instant, alternatif biçimlerde dizeler oluşturmak için biçimlendirme seçeneklerinin olmaması gibi sınırlamaları vardır. Daha fazla esneklik için, 'den' Instante dönüştürün OffsetDateTime. UTC'den uzaklık belirtin . Java.time'da bu bir ZoneOffsetnesne anlamına gelir . Burada UTC (+00) ile bağlı kalmak istiyoruz, böylece uygun sabiti kullanabiliriz ZoneOffset.UTC.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
2016-06-27T19: 15: 25,864Z
Veya Instantdersi atlayın .
OffsetDateTime.now( ZoneOffset.UTC )
Artık OffsetDateTimeelinizde bir nesne DateTimeFormattervarken, alternatif formatlarda metin içeren String nesneleri oluşturmak için kullanabilirsiniz . Birçok kullanım örneği için Yığın Taşması'nı arayın DateTimeFormatter.
ZonedDateTime
Belirli bir zaman dilimi için duvar saati zamanını görüntülemek istediğinizde , ZoneIdbir ZonedDateTime.
Bu örnekte Montréal saat dilimini uyguluyoruz. Yaz aylarında, Yaz Saati Uygulaması (DST) saçmalığı altında , bölgenin bir ofseti vardır -04:00. Öyleyse çıktıda günün saatinin saatler 15yerine dört saat erken olduğuna dikkat edin 19. Instantve ZonedDateTimeher ikisi de, sadece iki farklı mercekten bakıldığında aynı eşzamanlı anı temsil ediyor.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
2016-06-27T15: 15: 25.864-04: 00 [Amerika / Montreal]
Dönüştürülüyor
Eski tarih-saat sınıflarından kaçınmanız gerekirken, gerekirse eski sınıflara eklenen yeni yöntemleri kullanarak dönüştürebilirsiniz. Burada java.util.Date.from( Instant )ve kullanıyoruz java.util.Date::toInstant.
java.util.Date utilDate = java.util.Date.from( instant );
Ve diğer yöne gidiyor.
Instant instant= utilDate.toInstant();
Benzer şekilde, içine ve içinden dönüştürmek için GregorianCalendar(alt sınıfına Calendar) eklenen yeni yöntemleri arayın java.time.ZonedDateTime.
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.
Daha fazla bilgi edinmek için Oracle Eğitimi'ne bakın . Ve birçok örnek ve açıklama için Stack Overflow'da arama yapın. Spesifikasyon JSR 310'dur .
Şu anda bakım modunda olan Joda-Time projesi, java.time sınıflarına geçişi önerir .
Java.time nesnelerini doğrudan veritabanınız ile değiş tokuş edebilirsiniz . JDBC 4.2 veya üstü ile uyumlu bir JDBC sürücüsü kullanın . Dizelere gerek yok, derslere gerek yok . Hibernate 5 ve JPA 2.2 java.time'ı destekler .java.sql.*
Java.time sınıflarını nereden edinebilirim?
java.util.Dateasla yerel bir makine tarihi değildir. Her zaman 1970-01-01'den beri UTC + 00: 00'a göre geçen milisaniye olarak tanımlanır. Belki de yönteminin davranışıtoString()sizi gerçekten yerel saat diliminde bir temsil kullanan kafanızı karıştırır.