2011-12-06 4 views
1

からUTCに日付/時刻文字列を取得する私は、この文字列を持っている: これはどのようにローカルタイムゾーン

irb(main):034:0> Time.zone 
=> (GMT-08:00) Pacific Time (US & Canada) 

現地時間です「2011-12-05夜5時00分00秒」

今、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.localTime.parseを使用する必要があるようです:

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

私はそれの結果と、私のオリジナルのポストへの更新を追加しました。 – 99miles

+1

@ 99miles英雄のあなたのタイムゾーンが正しく設定されていないと思います。 'heroku config:add 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にしました。 しかし、私がタイムアウトを引いたときには、ユーザーがいる時間帯の現在の時刻と比較する必要があることがあります。そのため、Time.zone.nowを取得する必要がありましたが、もう一度、 Time.zoneはUTCに設定されているため、自動変換は行われませんでした。

私のソリューションは、保存されたユーザーのタイムゾーンを引き出し、このようにユーザーローカルタイムを取得するためにTime.nowにそれを適用することでした

@client.appointments.confirmed_in_future(current_business.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 

-

def confirmed_in_future(date_start = Time.zone.now) 
    confirmed.where("time >= ?", date_start) 
end 
関連する問題