gpt4 book ai didi

php - time() 是否保证具有闰秒意识?

转载 作者:IT王子 更新时间:2023-10-29 00:39:14 24 4
gpt4 key购买 nike

PHP 手册指出 time() 返回  "当前 UNIX 时间戳 "  ­ microtime() 返回  "当前 Unix 时间戳,微秒 " ʙ .

但是,这些函数是否保证表现得像that of strictly conforming POSIX.1 systems? ?

具体来说,闰秒的插入方式是否使得time()的输出 | microtime() 在第二天开始时向后跳转 1 秒,(这也是在闰秒结束时,)让我们重复 返回值——而不是新鲜唯一值——贯穿第二天的第一秒?

例如,如果我们轮询time() | microtime() 在 1998 -12 -31 和 1999 -01 -01 之间的每一微秒内,每个值在 915‰148‰800 范围内是否会出现两次 < = x < 915 148 801?

最佳答案

从 PHP 中的 time() 获取的 UNIX 时间戳是一种奇特的野兽。

我花了很长时间才理解这一点,但发生的是时间戳在闰秒期间增加,当闰秒结束时,时间戳(但不是 UTC!)跳回一秒。

这有一些重要的意义:

  • 您始终可以准确地将 UTC 时间戳转换为 UNIX 时间戳
  • 不能总是(对于所有时间点)从时间戳转换为 UTC
  • Unix 时间戳是不连续的,即它向后退一步。 (或者,它在 2 秒内保持不变而不递增。)
  • 如果您在从 UNIX 时间戳转换为 UTC 时遇到转换错误,该错误最多会延迟 2 秒。 (但这意味着您可能会选错一天。)
  • 回想起来,Unix 时间戳将呈线性。这意味着,如果您要存储时间序列数据并且您不关心每年一两秒的表示不正确,那么您可以考虑存储的带时间戳的数据是连续的。

解决方法

如果 Unix 时间戳既没有突然跳回也没有保持不变 2 秒怎么办?这正是谷歌为他们的服务器所做的。他们的解决方案是 slowly skew the time merely milliseconds at a time在很长一段时间内,使闰秒转移对应用程序几乎是无形的。 (就 Google 服务器上的应用程序和操作系统而言,the IERS 不再插入闰秒。)

关于php - time() 是否保证具有闰秒意识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com