2010-11-24 7 views

答えて

39

あなたはそれを解析する前に文字列にUTCタイムゾーン名を追加できます。

require 'time' 
s = "11/23/10 23:29:57" 
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010 
s += " UTC" 
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010 
+0

いやはやなし@Pete Brummの答えにaliter!私は実際にそれを試み、その結果を誤解しました。私の悪い。ありがとう。 – farhadf

+5

私の場合は動作しません。 's =" Fri Dec 3 17:05:41 2010 UTC "'はローカル時間として解析され、 'UTC'を無視します – Oktav

+6

これはおそらく最良の一般的な解決策ではありません – Ramfjord

15

をあなたがレールを使用している場合は、タイムゾーンを持つように設計されてActiveSupport::TimeZoneヘルパー

current_timezone = Time.zone 
Time.zone = "UTC" 
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00 
Time.zone = current_timezone 

を使用することができますユーザーのタイムゾーンに基づいて要求の先頭に設定します。

Time.zoneがすべて必要なので、Time.parseはまだサーバーのタイムゾーンとして解析されます。

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

注:上記の持っている時間のフォーマットはもはや働いていたので、私がサポートされている形式に変更。

+31

Time.zone全体のコンテキストを変更したくない場合は、ActiveSupport :: TimeZone.new( 'UTC')を使用してください。parse – Jerph

+1

@Jerph、あなたの答えは間違いなく最高です –

+0

私はここで同様の質問に答えました。http: //stackoverflow.com/a/36144567/629356 – ifightcrime

2

Time.zoneセット/解除

Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset 
+6

はDSTを無視するのでお勧めできません – Kuf

関連する問題