【问题标题】:How many years of millisecond timestamps can be represented by 41 bits?41位可以表示多少年的毫秒时间戳?
【发布时间】:2015-05-20 12:20:24
【问题描述】:

我正在查看Instagram blog post about sharded ID generation。这篇博文描述了生成 64 位标识符。他们的机制将 64 位中的 41 位分配给毫秒时间戳,他们说:

  • 41 位以毫秒为单位的时间(为我们提供 41 年的自定义纪元 ID)

这是一个错字吗?我计算出你可以在 41 位中存储 69 年的毫秒时间戳。方法如下:

  • 以 41 位存储的最大毫秒数:(2^41)-1 = 2199023255551 毫秒
  • 除以 (1000 * 60 * 60 * 24 * 365 ) 毫秒/年 = 69 年

那么,我哪里错了?

【问题讨论】:

  • 你的数学检查出来了,所以要么是错字,要么他们正在用这些位做一些事情,而不是你和我认为他们正在做的事情。 :-)
  • @templatetypedef 谢谢。这让我觉得自己很愚蠢/让我发疯。
  • Google milliseconds 2199023255551,很多结果支持你的理论
  • 也许他们的时代是 28 年前(在撰写本文时),他们说他们还有 41 年。 (我觉得很容易记住:纳米世纪中有 pi 秒。(精确到优于 1%)。)
  • 自定义纪元如何影响这一点,为什么他们提到客户纪元,不需要减去直到纪元开始之前使用的毫秒数。

标签: math time timestamp 64-bit bit-manipulation


【解决方案1】:

你的计算没有错。

(2^41)-1 ms
    == 2199023255.551 s
    == 610839.7932086 hr 
    == 25451.65805036 days 
    == 69.6828 Julian years 
    == 69.6843 Gregorian Years

这与您的结果密切相关 (69 years)。

但是,您链接到的网站确实说41 bits 给了他们

41 年的自定义时代的 ID

在这种情况下,“Epoch”可能指的是开始日期。鉴于那篇文章是在“3 年前”或2012 发表的,我们可以计算出他们的时代始于2012 + 41 - 69 == 1984。这个日期可能被选为a reference

【讨论】:

  • 你用什么程序来得到那个输出?
  • 哦,我只是手写的。我可能在 Google 中或手动进行了转换
  • 谁能告诉我为什么要减去 - 1
  • @rookie 减去 1 以丢弃 0 值。
猜你喜欢
  • 2015-09-22
  • 2023-03-11
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多