正确的ISO 8601格式

时间:2009-05-31 02:02:40

标签: time timezone iso8601

我正在为Ruby库重构一些代码。此代码包含Date解析器。 其中一个测试是解析这个字符串“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”。

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

Ruby中的

Time.parse给出了第二个。但同样,我希望100%确定以前的代码AND测试是错误的。

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

2 个答案:

答案 0 :(得分: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分掉了(当然也没注意到)并且嗖的一声,它有效。

答案 1 :(得分:0)

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

我敢打赌某处某处将010解释为值为8的八进制号。也许这是Time.parse()实施中的错误?

相关问题