13
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
4

2 回答 2

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
于 2013-01-11T16:31:58.667 回答
1

美国在今年采用了标准时间。

1883 年:美国和加拿大的铁路采用五个标准化时区来取代整个大陆社区的多个当地时间。每个人很快就会在“铁路时间”上运作。

来源

关于标准时间的维基百科页面

于 2013-01-11T16:33:26.433 回答