2011-12-06 81 views
1

UTC我有这个字符串: “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 

UPDATE:

在我的本地机器上,这个工程:

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 

回答

4

看来你应该使用Time.parse而不是Time.local

require "time" 
Time.parse("2011-12-05 17:00:00").utc 
+0

我添加了一个更新到我原来的职位,用的结果。 – 99miles

+1

@ 99miles我认为你在heroku上的时区没有正确设置。尝试'heroku config:添加TZ = PST'。 –

+0

谢谢你的帮助! – lesyk

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

0

我意识到我的问题是一个比较复杂的。我想将时间存储在数据库中,没有时区,也没有时区转换。所以我离开了UTC的服务器和rails应用程序时区。 但是,当我抽出时间时,我有时需要将它们与用户所在时区中的当前时间进行比较。所以我需要为用户获取Time.zone.now,但是我也有Time.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 
相关问题