2016-08-30 6 views
0

夏時間に応じて、PSTまたはPDT の日付文字列を解析できるようにしたいと考えています。これは、半年が日付 になり、残りの半分がPDTになることを意味します。RubyのDateTime.parseのPST/PDT

これは私のコードは以下のようになります。

DateTime.parse('2016-02-21 10:00:02 PST/PDT')

これはPST(GMT-8)のように日付を解析します。

PST/PDTで日付+時刻を自動的に解析する方法はありますか?

ありがとうございます!

答えて

3

ジャストノート:

DateTime.parse( '2016年2月21日午前10時00分02秒PST/PDT')は常にちょうどDateTime.parse( '2016のように、PST(標準時間)に解析します-02-21 10:00:02 PDT ')は常にPDT(夏時間)に解析されます。これは、DateTime &タイムライブラリは、 'I could be x or y'という 'PST/PDT'ではなく、タイムゾーンが明示的であることを期待しているからです。それがよりスマートならば、同じゾーン内であっても、夏時間に相当する場所でも、この瞬間には悲しいことではないが、両方のことがうまくいくかもしれません。

いくつかのオプション: 1)年

に応じて手動でPSTまたはPDTに入れて)ローカルゾーンに 2時間を変換するためにタイムゾーンの宝石を使用して、私はUTCですべての日付/時刻を格納し、変換する傾向があります私はそれらが必要です。

私はTZInfo gemを使用して現地時間に基づいて表示/計算しています。それはあなたがすでにすでにのDateTimeにしたり、インバウンド・データがすでにこのようにマークアップされた場合に格納されたデータを持っている場合今これはあなたの問題を解決することはできませんhere

recorded_time = Time.now.getutc 

tz = TZInfo::Timezone.get('US/Pacific') 
local_created_at = tz.utc_to_local(recorded_time) 

からタイムゾーンを使用しています。そうであれば、日付に基づいて解析することをお勧めします。 http://www.timeanddate.com/time/zone/usa/los-angeles

EDIT:あなたはこのデータを使用してルックアップテーブルを作成することができるだけでtzinfoのはあなたのためにこれを解決することができます実現:

tz = TZInfo::Timezone.get('US/Pacific') 
=> #<TZInfo::DataTimezone: US/Pacific> 

tz.local_to_utc(Time.parse('2016-07-21 10:00:02 PST/PDT')) 
=> 2016-07-21 17:00:02 UTC 

tz.local_to_utc(Time.parse('2016-02-21 10:00:02 PST/PDT')) 
=> 2016-02-21 18:00:02 UTC 
関連する問題