【发布时间】:2015-06-08 16:20:25
【问题描述】:
在我的应用中,我正在使用
> Time.parse('12:30 pm MDT').utc
=> 2015-06-08 18:30:00 UTC
> Time.parse('12:30 pm EDT').utc
=> 2015-06-08 16:30:00 UTC
> Time.parse('12:30 pm CDT').utc
=> 2015-06-08 17:30:00 UTC
> Time.parse('12:30 pm PDT').utc
=> 2015-06-08 19:30:00 UTC
> Time.parse('12:30 pm MST').utc
=> 2015-06-08 19:30:00 UTC
这一切都很好,但是一旦我开始询问夏威夷或阿拉斯加时区,它就会返回一个不正确的结果:
> Time.parse('12:30 pm HST').utc
=> 2015-06-08 12:30:00 UTC
> Time.parse('12:30 pm HAST').utc
=> 2015-06-08 12:30:00 UTC
> Time.parse('12:30 pm AKDT').utc
=> 2015-06-08 12:30:00 UTC
> Time.parse('12:30 pm AKST').utc
=> 2015-06-08 12:30:00 UTC
即使这样也行不通:
> Time.parse('12:30 pm -800').utc
=> 2015-06-08 12:30:00 UTC
有人知道为什么会这样吗?也许更重要的是,有人对如何解析 -800 或 -900 的时间有任何建议吗?
【问题讨论】:
-
您使用的是哪个 Ruby 版本?
-
可能是您的系统不知道这些时区是什么。您使用的是什么操作系统和 Ruby 版本?这里 `Time.parse('12:30 pm HST').utc` 在 Ruby 2.1.5、OS X 10.10 上生成
2015-06-08 16:30:00 UTC,尽管那不是夏威夷时间。 -
我也在 10.10 和 ruby 2.1.1 和 rails 4.1.1,但我确实尝试使用 ruby 2.1.5,这也产生了
2015-06-08 12:30:00 UTC。您的回复 fTime.parse('12:30 pm HST').utc产生2015-06-08 16:30:00 UTC也令人担忧,它应该产生21:30:00 UTC,对吧?这是一个红宝石错误吗?