将LocalDate,LocalTime,LocalDateTime转换为Java Instant

时间:2020-01-09 10:35:25  来源:igfitidea点击:

在本文中,我们将看到Java程序将LocalDate,LocalTime和LocalDateTime转换为java.time.Instant。

在Java中将LocalDate转换为Instant

即时提供UTC(世界标准时间)的瞬时时间,因此将LocalDate转换为即时需要向LocalDate添加时间。

在LocalDate类中,有一个atStartOfDay(ZoneId zone)方法,该方法根据传递的ZoneId的时区规则,在最早的有效时间从此LocalDate返回ZonedDateTime。

一旦有了ZonedDateTime实例,就可以在该实例上调用toInstant()方法以获取Instant。

import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class InsantExample {
  public static void main(String[] args) {
    LocalDate localDate = LocalDate.parse("2020-07-29");
    ZonedDateTime zdt = localDate.atStartOfDay(ZoneId.systemDefault());
    System.out.println("Zoned date time- " + zdt);
    Instant instant = zdt.toInstant();
    System.out.println("Instant- " + instant);
  }
}

在Java中将LocalTime转换为Instant

如果我们有LocalTime,则必须先向其添加日期以获取LocalDateTime,然后才能使用LocalTime的atDate()方法。

通过将时区信息添加到LocalDateTime,我们可以获取ZonedDateTime,然后将其转换为Instant。

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;

public class InsantExample {
  public static void main(String[] args) {
    LocalTime time = LocalTime.of(10, 53);
    LocalDateTime ldt = time.atDate(LocalDate.parse("2020-07-29"));
    Instant instant = ldt.atZone(ZoneId.systemDefault()).toInstant();
    System.out.println("Instant- " + instant);
  }
}

在Java中将LocalDateTime转换为Instant

LocalDateTime同时具有日期和时间信息,为了将LocalDateTime转换为Instant,我们只需要添加时区信息。这可以通过以下方式来完成。

将ZoneId添加到LocalDateTime并将其隐蔽到ZonedDateTime。

LocalDateTime ldt = LocalDateTime.now(); 
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
System.out.println("Instant- " + zdt.toInstant());

通过使用toInstant(ZoneOffset offset)方法-

LocalDateTime ldt = LocalDateTime.now(); 
ZoneId zone = ZoneId.of("Asia/Kolkata"); 
System.out.println("Instant- " + ldt.toInstant(zone.getRules().getOffset(ldt)));

在Java中将ZonedDateTime转换为Instant

由于ZonedDateTime具有所有信息;日期,时间和时区仅使用toInstant()方法将ZonedDateTime转换为Instant。

ZonedDateTime zdt = ZonedDateTime.now();
System.out.println("Instant- " + zdt.toInstant());