LocalDate'i Anında Nasıl Çevirebilirim?


106

Java 8'in yeni DateTime API'si ile çalışıyorum.

LocalDate'i Anında Nasıl Çevirebilirim? Bir istisna yaşıyorum

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

ve nedenini anlamıyorum.


Çünkü a LocalDatebir zamanı içermez.
OrangeDog

Yanıtlar:


100

InstantSınıf zaman on-line bir anlık bir noktayı temsil eder. A'ya ve a'dan dönüştürme LocalDatebir saat dilimi gerektirir. Diğer bazı tarih ve saat kitaplıklarının aksine, JSR-310 saat dilimini sizin için otomatik olarak seçmez, bu nedenle bunu sağlamanız gerekir.

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

Bu örnek ZoneId.systemDefault(), dönüştürmeyi gerçekleştirmek için JVM'nin varsayılan saat dilimini - - kullanır. İlgili soruya daha uzun bir yanıt için buraya bakın .


Güncelleme: Kabul edilen cevap, LocalDateTime::toInstant(ZoneOffset)yalnızca kabul eden kullanır ZoneOffset. Bu cevap, LocalDate::atStartOfDay(ZoneId)hangisinin kabul ettiğini kullanırZoneId . Bu nedenle, bu cevap genellikle daha kullanışlıdır (ve muhtemelen kabul edilen cevap olmalıdır).

PS. API'nin ana yazarıydım


1
ZoneId (saat dilimi) parametre olduğundan ve ZoneOffset olmadığından (yazın / kışın saat dilimi için UTC'den kaydırılan saatler) bunun kabul edilen cevaptan daha faydalı olduğunu düşünüyorum.
wuerg

1
Yazdığım bir birim testinde, com.google.protobuf.Timestamp'a dönüştürülen ve ardından Anlık aracılığıyla LocalDate'e her iki şekilde de eşlenen bir LocalDate'im var. Kabul edilen yanıtın önerdiği yaklaşımı kullanırken, karşılığında beklenen LocalDate'i alıyorum, ancak bu yaklaşımı kullanmak bana "bugün" yerine "dün" geri dönüyor.
Saat dilimim

128

Anı bir ana dönüştürmek için bir LocalDateTime örneğine sahip olmanız gerekir, örneğin:

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)

Çok teşekkürler. Anında Arama almak için bir saat dilimi belirlemem gerektiğini şimdi anlıyorum.
user1643352
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.