Wait the light to fall

润秒

焉知非鱼

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

如果我们想要更明确,我们可以使用 posixfrom-posixDateTime 转换为 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月没有闰秒。
  • 新年快乐!