为什么当年份小于1884年时,它会消除几毫秒?

Joh*_*nGa 13 java date jodatime

DateTime start = new DateTime().withYear(1884);
System.out.println(start);
System.out.println(start.minusYears(1));
Run Code Online (Sandbox Code Playgroud)

产量

1884-01-11T08:26:10.234-08:00
1883-01-11T08:26:10.234-07:52:58
Run Code Online (Sandbox Code Playgroud)

编辑1:我不对.它没有删除1.02秒

DateTime start = new DateTime().withYear(1884);
DateTime other = start.minusYears(1);
long diffMs = start.getMillis() - other.getMillis(); //31536422000
Run Code Online (Sandbox Code Playgroud)

编辑2:

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

编辑3:

使用Java Calendar,我看不出任何差异:

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());
Run Code Online (Sandbox Code Playgroud)

输出:

Mon Feb 11 18:46:42 PST 1884
Sun Feb 11 18:46:42 PST 1883
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 13

此时区历史页面 ;

1883年11月18日,美国大陆的四个标准时区被引入.英国已经采用了自己的英格兰,苏格兰和威尔士标准时间系统,在1884年帮助全球时区达成了国际共识.

换句话说,美国时区在这两个时间戳之间发生了变化.

编辑:如果您将时区设置为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
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,我无法用C#重现相同的内容,任何人都可以告诉哪些语言实现了7,02 s"修复"? (2认同)