ใน Java 9 เมธอด ofInstant() ถูกนำมารวมสำหรับการแปลง เป็น static method ของคลาส LocalDate LocalTime และ LocalDateTime เมธอดนี้แปลง object java.time.Instant เป็น LocalDate ต้องการ time zone ในรูปของ java.time.ZoneId
ไวยากรณ์
public static LocalTime ofInstant(Instant instant, ZoneId zone)
public static LocalDate ofInstant(Instant instant, ZoneId zone)
public static LocalDateTime ofInstant(Instant instant, ZoneId zone)
ตัวอย่างการใช้งาน
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Instant;
import java.time.ZoneId;
public class OfInstantMethodTest {
public static void main(String args[]) {
Instant instant = Instant.parse("2020-02-05T02:35:15.245Z");
System.out.println("Instant: " + instant);
LocalDate ld = LocalDate.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
System.out.println("LocalDate: " + ld);
LocalTime lt = LocalTime.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
System.out.println("LocalTime: " + lt);
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
System.out.println("LocalDateTime: " + ldt);
}
}
ผลลัพธ์
Instant: 2020-02-05T02:35:15.245Z
LocalDate: 2020-02-05
LocalTime: 08:05:15.245
LocalDateTime: 2020-02-05T08:05:15.245
คำอธิบาย
- Instant คือจุดบน timeline แบบ UTC (Z = Zulu time = UTC)
- ZoneId.of("Asia/Kolkata") คือโซนเวลา UTC+5:30 (India)
- Instant 02:35 UTC + 5:30 = 08:05 Local time
- LocalDate, LocalTime, LocalDateTime ทั้งหมดแสดงเวลาในโซน Asia/Kolkata
เมธอดที่เกี่ยวข้อง
Instant.atZone(ZoneId) - คืน ZonedDateTimeZonedDateTime.toLocalDate() - ดึง LocalDateZonedDateTime.toLocalTime() - ดึง LocalTimeZonedDateTime.toLocalDateTime() - ดึง LocalDateTime
ofInstant() ให้วิธีสร้าง LocalDate/Time/DateTime จาก Instant โดยตรง สะดวกกว่าเดิมที่ต้องผ่าน ZonedDateTime