Ruby DateTime:为什么60秒被视为59秒?

时间:2016-02-02 03:27:57

标签: ruby datetime

为什么以下不会抛出错误并返回59秒?

# 2016-02-02T16:05:59+00:00
DateTime.strptime('02-02-2016 04:05:60 PM', '%d-%m-%Y %I:%M:%S %p')

我使用Ruby 2.2.1运行Mac OS X El Capitan 10.11.3。

2 个答案:

答案 0 :(得分:1)

原因是由于strptime在较低级别实施which is what the documentation references.

  

%S第二个(0-60; 60可能发生闰秒;之前也允许61个。)

可能可能在那个时刻不是,所以图书馆允许你传入60.它&如果需要添加闰秒,那就足够聪明了。

答案 1 :(得分:-1)

我认为这是因为与2月29日不同,它存在时是可预测的,当它不存在时,第二个60的存在是不规则的,并且只提前约六个月决定,因此编码是不切实际/不可能的在图书馆(特别是未来)。因此,通常允许它,并且根据其评估点处可用的信息将其近似为最接近的秒。您不希望相同的参数字符串返回错误,具体取决于它的评估时间。