我试图将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
看起来它倒退了,但我无法解决如何做到这一点!
答案 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