2

我正在为 Ruby 库重构一些代码。此代码包括一个日期解析器。其中一项测试是解析这个字符串 "2008-02-20T8:05:00-010:00" ,它应该是ISO 8601

前面的代码实际上会输出:“Wed Feb 20 18:05:00 UTC 2008”。我的新代码输出:“Wed Feb 20 16:05:00 UTC 2008”。

我的问题是:哪一个是正确的?

Time.parse在 Ruby 中给出了第二个。但同样,我想 100% 确定之前的代码和测试有问题。

哪一个是对的?(也许通过用另一种语言的库来解析字符串?-我只知道 Ruby。)

4

2 回答 2

2

正确的 UTC 时间是 1805。时间组指示区域 -10 中的 0805,因此要获得 UTC,请将 10 添加到给定时间。因此是 1805。因为 1805 小于 2400,所以是同一天。

如果您的代码给出 1605,那么您几乎可以肯定将时区错误地设置为 -8 区,恰好是太平洋标准时间。


啊哈,看起来你的输入格式搞砸了。观察:

irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00") 
=> Wed Feb 20 08:05:00 -0700 2008

我恰好在 -7 区,所以它适合我的语言环境。但

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008

我得到了一个意想不到的结果。现在观察:

irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008

预期的结果。看到不同?第一个示例与第二个示例:

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")

我取出了虚假的额外 0(当然也没有注意到),嗖嗖,它起作用了。

于 2009-05-31T02:15:13.300 回答
0

我知道这已经很老了,但我只是遇到了它。

我敢打赌,某处的某些东西被解释010为值为 8的八进制Time.parse()数。也许这是实现中的一个错误?

于 2011-08-06T01:37:35.240 回答