Java dönüştürme arasında.zaman.LocalDateTime ve java.açıklama.Tarih
Java 8 tarih ve saat için tamamen yeni bir API vardır. Bu API en yararlı olan sınıflardan biri LocalDateTime
holding için saat dilimi-bağımsız tarih ile zaman değer.
Muhtemelen kod bu amaç için 5 ** eski sınıfını kullanarak satırları milyonlarca vardır. Eski ve yeni kod deki zaman gibi, ikisi arasında dönüştürmek için bir ihtiyaç olacaktır. Doğrudan yöntemler olarak bunu gerçekleştirmek için var gibi yok gibi, nasıl yapılabilir?
CEVAP
Kısa cevap:
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Date out = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
Açıklama:
(LocalDate
this question bağlı olarak)
İsmine rağmen java.util.Date
zaman çizgisi, bir değil, bir anlık temsil eder "tarih". Gerçek veri nesnesi içerisinde saklanan 1970-01-01T00:00 z beri milisaniye long
sayısı (1970 GMT/UTC başında gece yarısı).
Genel amaçlı-310 java.util.Date
eşdeğer sınıf Instant
ve fro: dönüşüm sağlamak için uygun bir yöntem vardır böylece
Date input = new Date();
Instant instant = input.toInstant();
Date output = Date.from(instant);
* *13 örnek bir zaman dilimi kavramı yok. Bu ise toString
bir zaman dilimine göredir çünkü ** 15 toString()
ararsan garip görünebilir. Ancak bu yöntem gerçekten hızlı Java varsayılan zaman dilimi dize sağlamak için kullanır. Zaman dilimi java.util.Date
fiili durumu, bir parçası değildir.
Instant
Bir de bu zaman dilimi ile ilgili herhangi bir bilgi içermiyor. Böylece, bir yerel Instant
dönüştürmek için tarih-saat belirtmek için gerekli bir zaman dilimi. Bu varsayılan bölge olabilir- ZoneId.systemDefault()
- ya uygulama kontrol eden zaman dilimi, kullanıcı tercihleri zaman dilimi gibi olabilir. LocalDateTime
anlık ve zaman dilimi her zaman uygun fabrika yöntemi vardır:
Date in = new Date();
LocalDateTime ldt = LocalDateTime.ofInstant(in.toInstant(), ZoneId.systemDefault());
Tersine, LocalDateTime
saat dilimi atZone(ZoneId)
yöntemini çağırarak belirtildi. ZonedDateTime
doğrudan Instant
: bir dönüştürülebilir
LocalDateTime ldt = ...
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date output = Date.from(zdt.toInstant());
ZonedDateTime
LocalDateTime
dönüştürme beklenmeyen davranış tanıtmak için bir potansiyele sahiptir unutmayın. Bu tarih-saat, gün Işığından yararlanma Saati kaynaklanıyor her yerel olduğundan değil. Sonbahar/güz, aynı yerel tarih-saat iki kez oluştuğu yerel örtüşme zaman sınırı yoktur. İlkbaharda, bir saat içinde kaybolur, bir boşluk var. Dönüşüm yapacağız daha ne tanımı atZone(ZoneId)
Javadoc bakın.
Eğer gezi turu özet, bir java.util.Date
LocalDateTime
java.util.Date
tekrar farklı bir anlık Işığından nedeniyle sona erebilir.
Dönüştürme 8601 uyumlu ISO java Dize.a...
Java arasında basit dönüşüm.açıklama.T...
Java dönüştürmek.açıklama.Tarih java i...
Ne zaman ayarlamak için bir java bölge...
java.açıklama.XMLGregorianCalendar içi...