将 LocalDate 转换为 java.util.Date [duplicate]

Converting LocalDate to java.util.Date [duplicate]

提问人:Abadellatif Abazine 提问时间:4/27/2023 最后编辑:AnonymousAbadellatif Abazine 更新时间:4/28/2023 访问量:112

问:

我正在尝试将 转换为 ,但在此过程中我损失了一些时间。java.time.LocalDatejava.util.Date

下面是显示问题的代码:

public static void main(String[] args) {
    var localDate = LocalDate.of(775, 7, 20);
    var date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
    System.out.println("date = " + date);
}

正如你所看到的,我有一个在 775 年、第 7 个月和第 20 天。LocalDate

但是当我把它转换为它时,它变成了 775 年、第 7 个月和第 16 天。Date

所以少了 4 天。

有没有办法在几天内没有损失地转换?

PS:我知道我不应该将旧的Date API与新的Date API混合在一起,但是我受到使用闭源ERP的限制java.util.Date

日期 java-time localdate java.util.date

评论

1赞 Sweeper 4/27/2023
结果没有错。只是对于非常旧的日期,它会产生错误的输出。Date.toString()
0赞 Abadellatif Abazine 4/27/2023
这是不一样的,因为在我的情况下,我失去了一些日子
0赞 Abadellatif Abazine 4/27/2023
@Sweeper我需要它必须纠正输出,否则它被认为是错误的
0赞 Sweeper 4/27/2023
没有什么可解决的。中的值是正确的。只需将其提供给您正在使用的任何 API。如果希望它以 a 的形式显示正确的日期,请将其转换回 .你可以看到它和你一样。DateStringLocalDateLocalDate
2赞 Anonymous 4/27/2023
您需要处理 1250 年前的日期吗?您需要注意当时有效的儒略历与使用的公历之间的差异。所以7月16日和7月20日这两天都是正确的,只是在不同的日历系统中给出。如果您在当时的资料中阅读了 7 月 20 日的日期,那么您需要的是儒略历,也就是说,不是正确的课程,对不起。除此之外,您正在以正确的方式进行转换。LocalDateLocalDate

答:

0赞 Gopinath Radhakrishnan 4/27/2023 #1

不确定这种差异的根本原因,但以下解决方法可能对您的上下文有所帮助:

    var localDate = LocalDate.of(775, 7, 20);
    var instant = Calendar.getInstance();
    instant.set(localDate.getYear(), localDate.getMonthValue() - 1 , localDate.getDayOfMonth());
    var date = instant.getTime();
    System.out.println("date = " + date);

评论

0赞 Abadellatif Abazine 4/27/2023
谢谢解决它,也不确定根本原因
2赞 Anonymous 4/27/2023
根本原因在于我在问题下的评论:并使用两种不同的日历系统,分别是公历和儒略历。LocalDateDate