Java.util.Date未正确转换为Java.time.LocalDate

时间:2018-05-21 10:36:23

标签: java date time localdate

我试图将java Date转换为java LocalTime,我的代码看起来像这样

Date memberBirthdayDate = club.getMembers().get(i).getDob();
        System.out.println(memberBirthdayDate);
        LocalDate memberBirthday = memberBirthdayDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

当我在转换之前和之后打印出日期时,它看起来像这样:

Before: Wed May 21 00:00:00 GMT 94
After: 0094-05-18

看起来它倒退了,但我无法解决如何做到这一点!

2 个答案:

答案 0 :(得分:0)

你可以那样做

 LocalDateTime memberBirthday = LocalDateTime.ofInstant(memberBirthdayDate.toInstant(), 
ZoneId.systemDefault());
Date out = Date.from(memberBirthday.atZone(ZoneId.systemDefault()).toInstant()); System.out.println(out);

答案 1 :(得分:0)

你的年代似乎有一个错误。你在评论中自己给出了答案:

  

我是通过Excel从csv导入的,它是自动生成的   格式化日期以删除' 19'

你所做的转换很适合1994年的日期:

    System.out.println("Before: " + memberBirthdayDate);
    LocalDate memberBirthday = memberBirthdayDate.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDate();
    System.out.println("After: " + memberBirthday);

输出:

Before: Sat May 21 00:00:00 IST 1994
After: 1994-05-21

我使用欧洲/都柏林时间来重现您的确切结果,因此IST适用于爱尔兰夏令时。您的Date似乎表示某些GMT偏移的开始,因此您需要使用与此偏移量一致的时区。我希望转换能够按预期工作,至少在1900年之后的所有日期,也可能更早。

然而,当这一年从1994年被截断到94年时,有趣的事情开始发生。远期的日期并没有那么明确。 LocalDate使用了预示格列高利历,这是实用且定义明确的,但不同意从1582年开始引入格里高利历之前在现实生活中使用的日期。我不确定Date使用了什么。对于公元94年的日期,我们不应该对5月21日的5月21日到来感到惊讶。

Before: Wed May 21 00:00:00 GMT 94
After: 0094-05-18

链接: Wikipedia article Gregorian calendar

相关问题