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

标签 java date jodatime

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/

相关文章:

java - 在Java中转换日期时出现异常

java - 获取两个日期之间的周数。

java - 如何在 java 中对 jdbc 代码进行单元测试?

java - Appengine JPA 更新

php - 存储当前日期时,应该在 web 应用程序中设置还是在数据库中设置?

php - mySQL 将时间戳与当前日期进行比较

java - 显示时RecyclerView为空

java - 提交可以自动收集到一个批处理中吗?

android - 如何检查字符串是否是有效的 Joda DateTime

hadoop - 带有ToDate内置函数的PIg- NullPointerException