微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java缺少28秒

如何解决Java缺少28秒

| 我正在尝试从数据库提取表并将其重新加载到另一种类型的数据库中。问题是,在我的本地设置中,日期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     

解决方法

将您的
Calendar
配置为使用其他
Locale
。 “ 0”将编码时间转换为当地时间。那20秒钟中的
Locale
并不存在不同的显示格式,因此,如果您坚持要保持
Locale
,并且坚持以秒为单位显示日期,那么您需要在荷兰政府中加以处理1937年;但是,如果将显示格式更改为其他“ 1”格式,则会发现基础时间数据结构的实际值未更改,它将解析为具有不同秒值的语言环境中的不同时间。 唯一的警告是,如果您要操纵读取和存储之间的时间,那么您可能会无意间创建一个新的
Time
Calendar
对象,该对象将根据
Locale
格式化时间到底层的转换来设置或重置其底层数据结构。数据表示。 这就是为什么最好在UTC下处理大量日期和时间而不节省夏令时的原因。即使时间与当地时间不匹配(并且对于不同时区的人来说也很难阅读),但UTC的每一秒都存在,因此可以通过简单的格式格式化来快速验证+5秒的更改影响时间。 唯一需要注意的是,以后,您必须始终将UTC时间转换回本地时间以进行显示。视您的听众的教育程度而定,有些荷兰人可能会惊讶地发现其政府不允许这种秒数存在,并且尽管裁定此类秒数不属于荷兰日历的一部分,但可能会要求他们出示。 只是等到发现1582年的失落之日。     ,在Java中,日期以与时区无关的方式在内部存储。 (它以毫秒为单位存储,因为-我忘记了开始日期,是格林尼治标准时间1970年1月1日吗?)输出日期时,则必须考虑时区。但是,任何内部操作都不重要。您没有说您正在使用什么数据库引擎,所以我不知道它如何存储日期。这些天,我主要使用Postgres,它将所有日期存储在GMT中,并在输入和输出时间在适当的时区之间进行转换。 因此,如果您只是将时区设置为GMT,则移动时区边界,夏时制等的任何更改都将无关紧要。     ,最简单的方法可能是对这些特定时间进行简单检查,然后相应地更改日期。     ,尝试从GMT或UTC中提取日期,然后以这种方式重新加载。然后,您将使用新系统的详细信息作为语言环境,而不是原始系统。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。