几周来,我已经在我的Rails应用程序中成功地使用了Chronic。我没有用它做任何花哨的事情,只是用它来解析基本的时间输入,比如‘1:21 my’或'1440‘等等。直到今天,当我运行我的测试套件时,一切都运行得很好,但遇到了一个非常奇怪的故障。
这些都是有效的:
Chronic.parse('1:21am')
=> 2016-10-02 00:21:00 +1000
Chronic.parse('0121')
=> 2016-10-03 01:21:00 +1100
Chronic.parse('0021')
=> 2016-10-03 00:21:00 +1100
Chronic.parse('1:21 AM')
=> 2016-10-02 00:21:00 +1000但是,12:21 AM返回nil:
Chronic.parse('12:21 AM')
=> nil在我的代码中,我实际上是在做一个strftime,去掉日期并保持时间,因为这就是我所关心的。但当Chronic返回nil时,这自然不起作用。
self.time = Chronic.parse(time).try(:strftime, '%l:%M %p')有趣的是,今天早上我所在的悉尼时区开始实行夏令时。我已经有一段时间没有对这段代码做任何修改了,所以我猜它是相关的。
发布于 2016-10-08 18:33:51
有两种解决方案:
A)告诉Chronic使用Time.zone
这种方式对我很有效。基本上:
Chronic.time_class = Time.zone
self.time = Chronic.parse(time).try(:strftime, '%l:%M %p')B)使用不受夏令时影响的固定日期进行解析
由于我只对时间而不是日期感兴趣,在这种情况下,我们可以在解析时间时使用我们知道不受夏令时影响的特定日期。例如:
Chronic.parse("5/27/1979 at #{time}").try(:strftime, '%l:%M %p')https://stackoverflow.com/questions/39813211
复制相似问题