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();
toString
Yö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
Instant
Sı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' Instant
e dönüştürün OffsetDateTime
. UTC'den uzaklık belirtin . Java.time'da bu bir ZoneOffset
nesne 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 Instant
dersi atlayın .
OffsetDateTime.now( ZoneOffset.UTC )
Artık OffsetDateTime
elinizde bir nesne DateTimeFormatter
varken, 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 , ZoneId
bir 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 15
yerine dört saat erken olduğuna dikkat edin 19
. Instant
ve ZonedDateTime
her 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.Date
asla 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.