题
我重构的一些代码红宝石图书馆。这个守则包括一个日期分析器。一个测试来分析这一串"2008-02-20T8:05:00-010:00"这应该是 ISO8601.
前面的代码实际上会产出:"三月20 18:05:00UTC2008".我的新代码产出:"三月20 16:05:00UTC2008".
我的问题是:哪一个是正确的?
Time.parse
在红宝石给第二个。但是,我再次想要100%确保以前的编码和测试是越野车。
哪一个是正确的?(由也许分析字符串与图书馆在另一种语言?-我只知道红宝石。)
解决方案
正确的UTC时间是1805年的时间基表示在0805区-10,因此要获得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
有年代的有望的结果。看到不同?第一示例VS第二:
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出(其中的 I 的肯定没有注意到任何)和嗖,它的工作原理。
其他提示
我知道这是很老,但我只是碰到它跑了。
我敢打赌,一些地方被解释010
作为的八的与值8号也许是在Time.parse()
的实现中的错误?
不隶属于 StackOverflow