润秒
— 焉知非鱼2019年1月有闰秒吗?(剧透:没有)
今晚我们将在午夜时分从10倒数到0,并来到新的一年。
但是当我们倒数到0时,它会是2019年吗?如果有闰秒怎么办?
快点 - 让我们检查IETF提供的闰秒列表。
不 - 它看起来不错,2017年1月1日是最后一个,并且该列表在2019年6月28日之前是 OK 的。
两年前,情况有所不同。
在“午夜”(UTC)时,它变成了2017年。
~ $ raku -e 'say DateTime.new("2017-01-01T00:00:00Z").year'
2017
但实际上,从晚上(和年)的11:59:59开始已经过了两秒钟!
~ $ raku -e 'say DateTime.new("2017-01-01T00:00:00Z") - DateTime.new("2016-12-31T23:59:59Z")'
2
在它变成2017年的那一刻,有一个闰秒。now返回的值表明了这一点。
虽然今晚会很好:
~ $ raku -e 'say DateTime.new("2019-01-01T00:00:00Z") - DateTime.new("2018-12-31T23:59:59Z")'
1
如果我们想要更明确,我们可以使用 posix 和 from-posix 将 DateTime
转换为 Instant
并再返回 - 后者将布尔值作为第二个参数来指示是否应该考虑闰秒。
my $date = DateTime.new("2017-01-01T00:00:00Z");
my $instant = Instant.from-posix: $date.posix, True;
my $instant2 = Instant.from-posix: $date.posix;
say $instant.DateTime.year;
say $instant2.DateTime.year;
2016
2017
我想知道有多少种语言支持闰秒?
看起来并不多。这太糟糕了。如果闰秒让你措手不及,可能会发生奇怪的事情。
结论 #
- 闰秒偶尔发生一次。当他们确实发生时,在两个日期时间之间经过两秒钟,这两个日期时间似乎相差仅一秒钟。
- 编程语言应该支持闰秒。
- 2019年1月没有闰秒。
- 新年快乐!