ฉันทำงานกับ DateTime API ใหม่ของ Java 8
จะแปลง LocalDate เป็น Instant ได้อย่างไร? ฉันได้รับข้อยกเว้นด้วย
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
และฉันไม่เข้าใจว่าทำไม
ฉันทำงานกับ DateTime API ใหม่ของ Java 8
จะแปลง LocalDate เป็น Instant ได้อย่างไร? ฉันได้รับข้อยกเว้นด้วย
LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);
และฉันไม่เข้าใจว่าทำไม
คำตอบ:
Instant
ชั้นแสดงให้เห็นถึงจุดทันทีที่เวลาสาย การแปลงเป็นและจากLocalDate
ต้องใช้เขตเวลา ไม่เหมือนกับไลบรารีวันที่และเวลาอื่น ๆ JSR-310 จะไม่เลือกเขตเวลาให้คุณโดยอัตโนมัติดังนั้นคุณต้องระบุ
LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
ตัวอย่างนี้ใช้เขตเวลาเริ่มต้นของ JVM - ZoneId.systemDefault()
- เพื่อทำการแปลง ดูคำตอบที่ยาวขึ้นสำหรับคำถามที่เกี่ยวข้องได้ที่นี่
ปรับปรุง: ได้รับการยอมรับการใช้คำตอบที่จะยอมรับเฉพาะLocalDateTime::toInstant(ZoneOffset)
ZoneOffset
คำตอบนี้การใช้งานที่รับใด ๆLocalDate::atStartOfDay(ZoneId)
ZoneId
ด้วยเหตุนี้คำตอบนี้จึงมีประโยชน์มากกว่า (และน่าจะเป็นคำตอบที่ยอมรับได้)
ปล. ฉันเป็นผู้เขียนหลักของ API
ในการแปลงเป็นแบบทันทีคุณต้องมีอินสแตนซ์ LocalDateTime เช่น:
LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)
LocalDate
ไม่รวมเวลา