更多: zhilu jiaocheng

Java 将 ZonedDateTime 转换为 LocalDate

要将 ZonedDateTime 转换为 LocalDate 实例,请使用 toLocalDate() 方法。
它返回一个与给定日期时间相同的年、月和日的LocalDate

import java.time.LocalDate;
import java.time.ZonedDateTime;
public class Main {
    public static void main(String[] args) {
        ZonedDateTime zonedDateTime = ZonedDateTime.now();

        LocalDate localDate = zonedDateTime.toLocalDate();

        System.out.println(localDate);
    }
}

输出:

2019-04-02
如何在Java8中将LocalDate和 ZonedDateTime进行相互转换

LocalDate 表示没有时间和时区的日历日期。

ZonedDateTime 实例包含这两种信息。

ZonedDateTime = LocalDate + 时间 + 时区

将 LocalDate 转换为 ZonedDateTime

要将 LocalDate实例转换为 ZonedDateTime实例,我们有两种方法。

LocalDate 直接转换为 ZonedDateTime

如果我们只想将当前时区的本地日期转换为不同时区的本地日期。
例如:
只想添加区域信息,那么我们可以使用LocalDate.atStartOfDay(zoneId)方法。

LocalDate localDate = LocalDate.now();
ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneId.of("EST5EDT"));
System.out.println(zonedDateTime);

输出:

2019-04-02T00:00-04:00[EST5EDT]

LocalDate 先转换为 LocalDateTime 再转换为 ZonedDateTime

如果我们想将时间和时区信息添加到本地日期,那么我们需要将这两个部分一一添加以获取ZonedDateTime实例。

  • ZonedDateTime atStartOfDay()
  • ZonedDateTime atTime(LocalTime time)
  • ZonedDateTime atTime(int 小时,int 分钟)
  • ZonedDateTime atTime(int 小时,int 分钟,int 秒)
  • ZonedDateTime atTime(int 小时,int 分钟,int 秒,int nanoOfSecond)

上述方法将有助于向 LocalDate添加时间部分。
然后我们可以使用 LocalDateTime.atZone(ZoneId) 方法添加区域信息。

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
    public static void main(String[] args) {

        LocalDate localDate = LocalDate.now();  //local date
        LocalDateTime localDateTime = localDate.atTime(10, 45, 56);  //Add time information
        ZoneId zoneId = ZoneId.of("Asia/Kolkata"); // Zone information
        ZonedDateTime zdtAtAsia = localDateTime.atZone(zoneId); // add zone information
        ZonedDateTime zdtAtET = zdtAtAsia
                .withZoneSameInstant(ZoneId.of("America/New_York")); // Same time in ET timezone

        System.out.println(zdtAtAsia);
        System.out.println(zdtAtET);
    }
}

输出:

2019-04-02T10:45:56+05:30[Asia/Kolkata]
2019-04-02T01:15:56-04:00[America/New_York]
日期:2020-09-17 00:09:42 来源:oir作者:oir