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 ;
Four standard time zones for the continental United States were introduced on November 18, 1883. Britain, which already adopted its own standard time system for England, Scotland, and Wales, helped gather international consensus for global time zones in 1884.
换句话说,美国时区在这两个时间戳之间发生了变化。
编辑:如果您将时区设置为 PST(时区),您将看不到此效果,而如果将它设置为某个位置(例如 America/Los_Angeles),您将看到。这是因为 PST 的时区偏移量没有改变,而是创建了 PST 并且洛杉矶从 LMT 更改为 PST)也就是说,洛杉矶时间改变了,而 PST 没有。
作为demo,你可以在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/