【问题标题】:is epoch time the same on the same machine with diffent scripts/programs在具有不同脚本/程序的同一台机器上的纪元时间相同
【发布时间】:2012-10-25 07:19:52
【问题描述】:

我想用 shell 来获取纪元时间 然后在 html 页面上使用 javascript 来获得另一个纪元时间 然后得到它们之间的区别 但恐怕不同脚本之间的纪元时间可能不同步 所以这个区别是没有用的

所以我想知道,如果我同时使用 shell 和 javascript 来获取 epoch tiem 结果是否相同? 如果不是,差别有多大?

谢谢!

【问题讨论】:

  • 我猜它们会是一样的,但它不能被信任,因为浏览器可能会做一些奇怪的事情,或者用户可能会更改一些设置或其他东西。如果您只是使用服务器来获取您的纪元时间,那就更好了。
  • 我的意思是如果javascript和shell脚本在同一台机器上运行,它们会一样
  • 我知道你的意思。我要说的是,这些东西并不总是完全可靠的,因为不是每个人都遵循规范。大多数情况下,它们应该是相同的,是的。

标签: javascript shell epoch


【解决方案1】:

如果您指的是自 Unix 纪元 (1970-01-01T00:00:00Z) 以来的秒数,则它受此定义的约束。您应该能够看到的唯一差异是由以下原因引起的:

  • 返回它的系统调用的不同调用时间*);
  • 不同系统上的时钟不同步。

可能还有:

  • 不同处理器内核/物理处理器上的时钟不同步;
  • 返回当前时间的函数的实现相关处理(例如,JS 引擎实现可能会在短时间内缓存该值,因为不必执行实际的系统调用,尽管我对此表示怀疑)。

根据您需要的时间分辨率,其中一些不是问题。我的猜测是,如果您不需要比 1s 更精细的粒度,那么您应该会更好(在同一台机器上)。

*) 还要注意,在单核系统上,你不能真正从不同的系统调用中获得相同的时间(至少在 ns 分辨率下),除非内核缓存它,因为它们必须一个接一个地发生.

【讨论】:

  • 哦,理论有点深,所以如果我在同一台机器上使用shell脚本和javascript,我希望精度粒度在0.2秒或以下的水平,是否可能?
  • @user1769686 我希望如此(实际上我相信它应该更多地以毫秒为单位)。但请记住,由于计算机负载较高,尤其是在显示页面的浏览器中,您偶尔会很容易看到较大的延迟。
【解决方案2】:

根据ECMA-262 section 15.9.1.1

自 1970 年 1 月 1 日以来,时间在 ECMAScript 中以毫秒为单位测量 世界标准时间。在时间值中,闰秒被忽略。假设有 正好是每天 86,400,000 毫秒。

所以,是的,每个符合标准的 JavaScript 实现都必须返回完全相同的值,并自行处理任何物理时钟的怪癖。除非系统时钟设置错误,否则您将在任何地方都有相同的值。

请注意,在其他语言和系统中“纪元”和“秒后”的定义可能不同(至少大多数其他系统使用秒,而不是毫秒,并且通常考虑闰秒),所以你不能保证 JS 时间,即使除以 1000 也会匹配来自另一个平台或操作系统的时间戳。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多