DateTime start = new DateTime().withYear(1884);
System.out.println(start);
System.out.println(start.minusYears(1));

输出量
1884-01-11T08:26:10.234-08:00
1883-01-11T08:26:10.234-07:52:58

编辑1:
我说的不对。它没有删除1.02秒
DateTime start = new DateTime().withYear(1884);
DateTime other = start.minusYears(1);
long diffMs = start.getMillis() - other.getMillis(); //31536422000

编辑2:

有趣的是,我对toString();的输出感到困惑-(-08:00-07:52:58)

编辑3:

使用Java日历,我看不出任何区别:
Calendar cal = Calendar.getInstance();
cal.set(start.getYear(),
        start.getMonthOfYear(),
        start.getDayOfMonth(),
        start.getHourOfDay(),
        start.getMinuteOfHour(),
        start.getSecondOfDay());
System.out.println(cal.getTime());

cal = Calendar.getInstance();
cal.set(start.getYear()- 1,
        start.getMonthOfYear(),
        start.getDayOfMonth(),
        start.getHourOfDay(),
        start.getMinuteOfHour(),
        start.getSecondOfDay());
System.out.println(cal.getTime());

输出:
Mon Feb 11 18:46:42 PST 1884
Sun Feb 11 18:46:42 PST 1883

最佳答案

this time zone history page;



换句话说,美国时区在这两个时间戳之间改变。

编辑:如果您将您的时区设置为PST(时区),您将不会看到此效果,而如果您将其设置为某个位置(例如America/Los_Angeles),则可以。这是由于PST的时区偏移未更改,而是创建了PST,而洛杉矶从LMT更改为PST。也就是说,洛杉矶时间更改了,而PST却没有更改。

作为演示,您可以在linux上尝试;

# PST test
$ TZ=PST8PDT date -d '1883-01-01 12:00:00 UTC'
Mon Jan  1 04:00:00 PST 1883

# America/Los_Angeles test
$ TZ=America/Los_Angeles date -d '1883-01-01 12:00:00 UTC'
Mon Jan  1 04:07:02 LMT 1883

关于java - 为什么当年份小于1884时,它会删除几毫秒?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14282423/

10-10 08:21