我正在为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。)
答案 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()
实施中的错误?