我无意中发现2021年5月3日是2021年的里程碑之一Unix时间。正好在午夜(UTC),数字time_t
可以被 10,000,000 整除:
$ date --utc --date='@1620000000'
Mon 3 May 00:00:00 UTC 2021
我不太擅长数学,所以希望有人能解释以下内容:
- Unix 时间在午夜整除 10,000,000 秒的频率有多少?
- 这种现象有名字吗?
- 还有哪些其他有趣的 Unix 时代?
答案1
我迭代了 0000000000 到 9990000000,这些是在午夜返回的可被 10,000,000 整除的日期。
for i in $(seq 0 9);do for j in $(seq 0 9);do for k in $(seq 0 9); do DATE="@${i}${j}${k}0000000"; echo $DATE; date --utc --date=$DATE; done; done; done | grep "00:00:00" -B1
@0000000000
Thu Jan 1 00:00:00 UTC 1970
--
@0270000000
Sun Jul 23 00:00:00 UTC 1978
--
@0540000000
Wed Feb 11 00:00:00 UTC 1987
--
@0810000000
Sat Sep 2 00:00:00 UTC 1995
--
@1080000000
Tue Mar 23 00:00:00 UTC 2004
--
@1350000000
Fri Oct 12 00:00:00 UTC 2012
--
@1620000000
Mon May 3 00:00:00 UTC 2021
--
@1890000000
Thu Nov 22 00:00:00 UTC 2029
--
@2160000000
Sun Jun 13 00:00:00 UTC 2038
--
@2430000000
Wed Jan 2 00:00:00 UTC 2047
--
@2700000000
Sat Jul 24 00:00:00 UTC 2055
--
@2970000000
Tue Feb 12 00:00:00 UTC 2064
--
@3240000000
Fri Sep 2 00:00:00 UTC 2072
--
@3510000000
Mon Mar 24 00:00:00 UTC 2081
--
@3780000000
Thu Oct 13 00:00:00 UTC 2089
--
@4050000000
Sun May 4 00:00:00 UTC 2098
--
@4320000000
Wed Nov 24 00:00:00 UTC 2106
--
@4590000000
Sat Jun 15 00:00:00 UTC 2115
--
@4860000000
Tue Jan 4 00:00:00 UTC 2124
--
@5130000000
Fri Jul 25 00:00:00 UTC 2132
--
@5400000000
Mon Feb 13 00:00:00 UTC 2141
--
@5670000000
Thu Sep 4 00:00:00 UTC 2149
--
@5940000000
Sun Mar 26 00:00:00 UTC 2158
--
@6210000000
Wed Oct 15 00:00:00 UTC 2166
--
@6480000000
Sat May 6 00:00:00 UTC 2175
--
@6750000000
Tue Nov 25 00:00:00 UTC 2183
--
@7020000000
Fri Jun 15 00:00:00 UTC 2192
--
@7290000000
Mon Jan 5 00:00:00 UTC 2201
--
@7560000000
Thu Jul 27 00:00:00 UTC 2209
--
@7830000000
Sun Feb 15 00:00:00 UTC 2218
--
@8100000000
Wed Sep 6 00:00:00 UTC 2226
--
@8370000000
Sat Mar 28 00:00:00 UTC 2235
--
@8640000000
Tue Oct 17 00:00:00 UTC 2243
--
@8910000000
Fri May 7 00:00:00 UTC 2252
--
@9180000000
Mon Nov 26 00:00:00 UTC 2260
--
@9450000000
Thu Jun 17 00:00:00 UTC 2269
--
@9720000000
Sun Jan 6 00:00:00 UTC 2278
--
@9990000000
Wed Jul 28 00:00:00 UTC 2286
每 270000000 秒发生一次,即每 3125 天发生一次。
答案2
每 10M就会得到一个可被10 000 000
10M 整除的数字。这就是因素 1。
每 24 小时(或 86 400 秒)就会到达午夜。这就是因素 2。
您需要 10M 的倍数和86400。这是一个称为 LCM(最小公倍数)的数学函数。你可以获取此页面上的结果。
这个数字是270 000 000
(或270M)。
第一次发生是在 0 秒纪元(正式来说这可能有争议)。或者1/1/1970 12:00:00 UTC
。
这些事件的简短列表如下:
$ for i in $(seq 20); do mult=$((i*270000000)); printf '%12s -- %s\n' "$mult" "$(date -ud @"$mult")"; done
270000000 -- Sun 23 Jul 1978 12:00:00 AM UTC
540000000 -- Wed 11 Feb 1987 12:00:00 AM UTC
810000000 -- Sat 02 Sep 1995 12:00:00 AM UTC
1080000000 -- Tue 23 Mar 2004 12:00:00 AM UTC
1350000000 -- Fri 12 Oct 2012 12:00:00 AM UTC
1620000000 -- Mon 03 May 2021 12:00:00 AM UTC
1890000000 -- Thu 22 Nov 2029 12:00:00 AM UTC
2160000000 -- Sun 13 Jun 2038 12:00:00 AM UTC
2430000000 -- Wed 02 Jan 2047 12:00:00 AM UTC
2700000000 -- Sat 24 Jul 2055 12:00:00 AM UTC
2970000000 -- Tue 12 Feb 2064 12:00:00 AM UTC
3240000000 -- Fri 02 Sep 2072 12:00:00 AM UTC
3510000000 -- Mon 24 Mar 2081 12:00:00 AM UTC
3780000000 -- Thu 13 Oct 2089 12:00:00 AM UTC
4050000000 -- Sun 04 May 2098 12:00:00 AM UTC
4320000000 -- Wed 24 Nov 2106 12:00:00 AM UTC
4590000000 -- Sat 15 Jun 2115 12:00:00 AM UTC
4860000000 -- Tue 04 Jan 2124 12:00:00 AM UTC
5130000000 -- Fri 25 Jul 2132 12:00:00 AM UTC
5400000000 -- Mon 13 Feb 2141 12:00:00 AM UTC
那是UTC 时间(协调世界时),这没有显示闰秒.那是一个不同于国际原子时 (TAI)与 GPS 时间不同。
我不知道该事件已被命名(我也不认为它们应该被命名)。
有一些琐事在维基百科:
- UTC 时间 2009 年 2 月 13 日星期五 23:31:30,Unix 时间的十进制表示达到 1234567890 秒。
答案3
原则上,您要寻找一天中秒数的最小公倍数 (24·60·60=86400=2⁷·3³·5²) 和 10⁷=2⁷·5⁷,即 2⁷·3³·5⁷。
当您将 2⁷·3³·5⁷ 除以一天中的秒数时,您会得到
2⁷·3³·5⁷
-------- = 5⁵
2⁷·3³·5²
也就是 5⁵=3125 天。
当然,现实并不那么顺利。如果您考虑到“午夜”取决于闰秒这一事实,您很快就会注意到,您必须根据您提出问题的计算时间的方式来定义:UTC 与 GPS 系统时间不同,这可能与手表显示的时间不同,也与 Google 内部使用的时间不同。
1 很多人称赞谷歌通过“延长”时间更长的时间(一天)来“解决”闰秒一致性问题。我个人对此深恶痛绝:你没有实施与其他人的时间一致的必要措施,而是摆弄你的时钟。其他人都大规模地解决了这个问题:当你将谷歌自称的“行星级”计算与全球移动网络运营商三十多年来一直在做的事情进行比较时,同步问题并不是那么困难。