【发布时间】:2021-12-02 02:26:07
【问题描述】:
当我们从带有年份0001 的java.util.Date 构造它时,似乎DateTime 没有用正确的日期初始化它自己。
import java.time.LocalDateTime;
import java.util.TimeZone;
public class TestMain {
public static void main(String[] args) {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
java.util.Date d = new java.util.Date(-62135640000000L);
java.time.Instant i = java.time.Instant.ofEpochMilli(-62135640000000L);
System.out.println("d = new java.util.Date(-62135640000000L) : " + new java.util.Date(-62135640000000L));
System.out.println("new org.joda.time.DateTime(d) : " + new org.joda.time.DateTime(d));
System.out.println("new org.joda.time.DateTime(-62135640000000L) : " + new org.joda.time.DateTime(-62135640000000L));
System.out.println("java.time.LocalDateTime.ofInstant(i, java.time.ZoneOffset.UTC): " + LocalDateTime.ofInstant(i, java.time.ZoneOffset.UTC));
}
}
输出:
d = new java.util.Date(-62135640000000L) : Sun Jan 02 12:00:00 UTC 1
new org.joda.time.DateTime(d) : 0000-12-31T12:00:00.000Z
new org.joda.time.DateTime(-62135640000000L) : 0000-12-31T12:00:00.000Z
java.time.LocalDateTime.ofInstant(i, java.time.ZoneOffset.UTC): 0000-12-31T12:00
除了时区相关的差异,如果你注意:
- 日期是
02inDateobject 和31inDateTime(或00,如果您更改为UTC) - 年份是
0001inDateobject 和0000inDateTime
是我做错了什么,还是这是一个错误?
做了更多的计算
62135640000000 / 1000 / 3600 / 24 / 365.25 = 1968.9596167008898015058179329227
0.9596167008898015058179329227 * 365.25 = 350.5
365.25 - 350.5 = 14.75
所以-62135640000000 = 负 1969 年零 350.5 天。或 0000 年开始后约 14.75 天。
【问题讨论】:
-
一年不是 365.0000 天。
-
@VGR,你是对的。更新。还添加了
java.time行为。
标签: java datetime jodatime java-time