首页 > 解决方案 > 如何将 java.util.Date 转换为 java.time.LocalDate 并保留日期/时间

问题描述

我正在尝试将 a 转换java.util.Datejava.time.LocalDate

[java.util.Date instance].toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

但是,有一种情况[java.util.Date instance],例如白天时间:22:25,我选择 ZoneId 像这样,例如:ZoneId.of("Asia/Singapore").

结果LocalDate将有不同的一天(因为该区域增加了 +6 小时),例如欧洲/明斯克:

printing java.util.Date: Thu Mar 04 22:25:00 CET 2021
printing converted java.util.Date to java.time.LocalDate with Europe/Minsk: 2021-03-04
printing converted java.util.Date to java.time.LocalDate with Asia/Singapore: 2021-03-05

我想在结果中保留与LocalDateDate实例相同的日期。一些方法如何解决这个问题?我想可能有几种方法。

标签: javajava-timelocaldatejava.util.date

解决方案


您可以将其转换为即时,将时区设置为 UTC,因为java.util.Date使用的是 UTC。

public static LocalDate convert (Date date) {
    return date.toInstant()
      .atZone(ZoneId.of("UTC"))
      .toLocalDate();
}

推荐阅读