当前位置: 首页 > 面试题库 >

Java系统毫秒是否考虑了leap秒?

红砚文
2023-03-14
问题内容

java函数System。 currentTimeMillis
()显然返回自1970年1月1日以来的秒数。但是,根据Wikipedia.org/wiki/Leap_second的说法,自1972年以来已经有25个leap秒。这意味着自1970年1月1日以来的实际秒数比单纯的计算所建议的秒数多25。是否系统。
currentTimeMillis ()会天真的计算而忽略the秒吗?


问题答案:

正式而言,这取决于操作系统和实现-
至少对于而言Date。来自的文档java.util.Date

尽管Date类旨在反映协调世界时(UTC),但它可能并非完全如此,具体取决于Java虚拟机的宿主环境。在所有情况下,几乎所有现代操作系统都假设1天=
24×60×60 = 86400秒。但是,在UTC中,大约每年一到两年一次,称为“
le秒”。always秒始终是一天的最后一秒,并且总是在12月31日或6月30日。例如,由于增加了leap秒,1995年的最后一分钟长61秒。大多数计算机时钟不够精确,无法反映the秒的区别。

我怀疑您会发现,尽管您的计算机时钟大致与UTC对齐,但这是通过NTP等方法来进行的,它会定期校正时钟,而不是操作系统 真正 实现了leap秒。

我相信JRE库通常 承担86400-第二天。它使生活 这么 简单得多,如果你要纠正不准确的系统时钟,无论如何,你可能会为闰秒以及正确的,太。

您真的很想弄清楚自己感兴趣的东西。如果您需要一种使用leap秒来表示日期和时间的方式,那么标准Java库可能对您而言效果不佳。据我所知,甚至JSR-310也不再支持leap秒(对于大多数开发人员来说,这是非常明智的决定)。



 类似资料:
  • 问题内容: PHP手册指出返回  “ 当前UNIX时间戳”  ᴀ  和返回 “当前Unix时间戳和微秒”  ʙ。 但是,是否 保证 这些功能的行为类似于严格符合POSIX.1的系统的行为? 具体来说,是否插入leap秒,使  |  的输出 在第二天的开始(也就是the秒的结尾) 向后* 跳1秒(在第二天的第一秒的整个过程中)

  • 主要内容:1.考虑一:负负得正,2.考虑二:终态设计,3.考虑三:长尾效应,4.考虑四:存储周期,5.考虑五:AKF扩展,6.考虑六:服务自治,7.考虑七:应急预案,8.考虑八:故障隔离,9.考虑九:风险巡检,10.考虑十一严格准入1.考虑一:负负得正 如果把错误的逻辑改对了反而可能引起问题。 这种问题要避免最好的时机是初版设计和开发阶段就避免。除了设计阶段逻辑要清晰,代码要做好审查、加上单体测试等测试手段外,可以将中间结果用debug日志打印。建议自测阶段多用debug级别日志跑几遍,进行观察

  • 问题内容: 我正在使用毫秒在Java中进行一些日期计算,并注意到以下问题: 我知道1年 大约 是31,556,952,000毫秒,所以我的乘法不知何故。 谁能指出我做错了什么?我应该使用很长时间吗? 问题答案: 我应该使用很长时间吗? 是。问题是,由于等等都是s,当您将它们相乘时会得到一个。你是转换到一个,但只有 后 的乘法已经导致了错误的答案。 要解决此问题,您可以将第一个强制转换为:

  • 问题内容: 我想避免序列化(在JMS / AMF中),但仍使用JPA / Hibernate保留该字段。 是修改我的朋友?注释和修饰符是否相关? Java规范明确指出,系统服务不会将瞬态字段保存到持久性存储中。但是hibernate是系统服务吗?(我不这样认为) http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.h

  • 问题内容: 自1970年1月1日以来,以毫秒表示的时间戳是存储时间戳的常用方法,例如在Java中。 例如: 这样的时间戳可以以人类可读的时间格式进行格式化,例如使用此代码 给出输出: 现在想象一下,今天午夜时分,政府引入了新的UTC leap秒。如果我在tommorow上面运行代码,则系统上的Java JRE无法知道该leap秒的介绍,并且会错误地格式化时间(一秒)。 我的假设正确吗? 在不能总是

  • 你能告诉我一种从Java执行进程而不管底层操作系统的方法吗?例如。 上面的行在Windows环境中执行Maven,但我如何在任何操作系统中运行上面的命令? 如果我没有在启动时添加,那么我就无法在windows环境中运行,错误显示尽管maven主页设置正确。