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,我看不出任何差异:
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
答案 0 :(得分:13)
来自this time zone history page;
1883年11月18日,美国大陆有四个标准时区。英国已经采用了自己的英格兰,苏格兰和威尔士标准时间系统,于1884年帮助全球时区达成国际共识。 / p>
换句话说,美国时区在这两个时间戳之间发生了变化。
编辑:如果您将时区设置为PST(时区),您将看不到此效果,而如果您将其设置为某个位置(例如America / Los_Angeles),您将会。这是由于 PST的时区偏移没有改变,而是创建了PST并且洛杉矶从LMT改为PST)也就是说,洛杉矶的时间发生了变化,而PST却没有。 / p>
作为演示,你可以在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
答案 1 :(得分:1)
美国在今年采用了标准时间。
1883年:美国和加拿大铁路采用五个标准化时区 取代整个社区的多个当地时间 大陆。每个人都很快会在“铁路时间”上运作。