Java缺少28秒

fer*_*dyh 8 java calendar

我正在尝试从数据库中提取表并在另一种类型的数据库中重新加载它.问题是,在我的本地设置中,日期为1937年7月1日的问题是在00:00:00时获取时间戳.在荷兰,他们在1937年改变了经脉,导致1937年7月1日的前28秒不存在.

当我在日历中读取日期以重新格式化输出时,时间变为日期前28秒; 6月30日23:59:32或7月1日00:00:28(取决于司机)任何人都知道解决这个问题的方法?

http://themagicofscience.blogspot.com/2010/08/java-puzzler-1-july-1937.html

Edw*_*uck 3

配置您Calendar使用不同的Locale.

Calendars 将编码时间转换为本地时间。这 20 秒以上的时间在不同的显示格式中是不存在的Locale,所以如果你坚持保留这一点Locale,并且你坚持用这样设置的秒数显示日期,那么你需要在 1937 年向荷兰政府提出这个问题;但是,如果将显示格式更改为不同的显示格式Locale,您会发现底层时间数据结构的实际值没有更改,它将解析为具有不同秒值显示的区域设置中的不同时间。

唯一需要注意的是,如果您操纵读取和存储之间的时间,那么您可能会无意中创建一个新的TimeCalendar对象,该对象将根据格式化Locale时间到底层数据表示的转换来设置或重置其底层数据结构。

这就是为什么最好在没有夏令时的情况下以 UTC 进行批量日期和时间处理。尽管时间与当地时间不匹配(对于不同时区的人来说更难读取),但 UTC 的每一秒都存在,因此简单的 +5 秒更改可以通过受影响的简单格式快速验证时间。

这种处理的唯一警告是,稍后您必须始终将 UTC 时间转换回本地时间以进行显示。根据观众的教育程度,一些荷兰人可能会惊讶地发现他们的政府不允许这样的秒存在,并且可能会要求显示它们,尽管规定这样的秒不属于荷兰日历的一部分。

等待您发现 1582 年失踪的日子。