我有这个字符串: “2011-12-05 17:00:00”
这是当地时间
irb(main):034:0> Time.zone
=> (GMT-08:00) Pacific Time (US & Canada)
现在我如何以UTC格式获取Time对象?
这些不起作用:
Time.local("2011-12-05 17:00:00") => 2011-01-01 00:00:00 +0000
Time.local("2011-12-05 17:00:00").utc => 2011-01-01 00:00:00 UTC
更新
在我的本地计算机上,这有效:
Time.parse("2011-12-05 17:00:00").utc
=> 2011-12-06 01:00:00 UTC
但是在heroku控制台上却没有:
Time.parse("2011-12-05 17:00:00").utc
=> 2011-12-05 17:00:00 UTC
答案 0 :(得分:4)
您似乎应该使用Time.parse
代替Time.local
:
require "time"
Time.parse("2011-12-05 17:00:00").utc
答案 1 :(得分:0)
在rails应用程序中尝试:
Time.zone = "Pacific Time" # => "Pacific Time"
Time.zone.parse("2011-12-05 17:00:00") # => Mon, 05 Dec 2011 17:00:00 UTC +00:00
详情here
答案 2 :(得分:0)
我意识到我的问题有点复杂了。我想将时间存储在数据库中,没有时区,也没有时区转换。所以我离开了UTC的服务器和rails app时区。 但是当我把时间拉出来时,我有时需要将它们与用户所在的时区中的当前时间进行比较。所以我需要为用户获取Time.zone.now,但同样,我有时间.zone设置为UTC,因此不会发生自动转换。
我的解决方案是提取存储的用户时区并将其应用于Time.now以获取用户当地时间,如下所示:
class Business < ActiveRecord::Base
def tz
TZInfo::Timezone.get(ActiveSupport::TimeZone::MAPPING[self.time_zone])
end
def now
tz.utc_to_local(Time.zone.now)
end
end
所以我可以做类似的事情:
@client.appointments.confirmed_in_future(current_business.now)
-
def confirmed_in_future(date_start = Time.zone.now)
confirmed.where("time >= ?", date_start)
end