如果我的TIme.zone是UTC,为什么Time.now会返回PST?

时间:2014-11-21 06:57:44

标签: ruby-on-rails ruby time

在我的Rails应用程序中,我执行以下操作:

Time.zone.name #=> 'UTC'

为什么我这样做:

Time.parse('2014-12-19').end_of_day.to_datetime

我得到:Fri, 19 Dec 2014 23:59:59 -0800

当我这样做时:

Time.use_zone('Pacific Time (US & Canada)') { Time.parse('2014-12-19').end_of_day.to_datetime }

我得到完全相同的东西:Fri, 19 Dec 2014 23:59:59 -0800

为什么没有应用区域?

3 个答案:

答案 0 :(得分:2)

您需要使用Time.zone.parse来使其使用正确的时区。

2.1.3 (main):0 > Time.zone.name
=> "UTC"
2.1.3 (main):0 > Time.zone.parse('2014-12-19').end_of_day.to_datetime
=> Fri, 19 Dec 2014 23:59:59 +0000

答案 1 :(得分:0)

你在找这个吗?

Time.use_zone('Pacific Time (US & Canada)') { Time.parse('2014-12-19').end_of_day.to_datetime.in_time_zone}

这会为您提供正确的时区。有关这方面的更多信息,请查看THIS SO QUESTION

答案 2 :(得分:0)

你可能在Windows上,它在Rails中有一个错误,Rails总会返回你的本地时区。见How does Rails know my timezone?

您也可以使用

zone = ActiveSupport::TimeZone['Hawaii']
zone.at(Time.now)
=> Tue, 16 Jun 2015 09:22:53 HST -10:00

但我更喜欢Pamio的想法

Time.now.in_time_zone('Hawaii')
=> Tue, 16 Jun 2015 09:43:17 HST -10:00