web-dev-qa-db-ja.com

どうすればRubyを取得して、異なるタイムゾーンにあるかのように時間を解析できますか?

私はこのようなものを解析しています:

11/23/10 23:29:57

タイムゾーンは関連付けられていませんが、UTCタイムゾーン内にあることがわかります(私はそうではありません)。これをUTCタイムゾーンにあるかのように解析するには、どうすればRubyを取得できますか?

41
farhadf

文字列を解析する前に、文字列に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
41
maerics

Rails=を使用している場合、_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

注:上記の時刻形式は機能しなくなったため、サポートされている形式に変更しました。

21
Pete Brumm

Time.zoneの設定/設定解除なしの@Pete Brummの回答へのaliter

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

ActiveSupport [Railsなどから]を使用している場合、これを行うことができます:

ActiveSupport::TimeZone["GMT"].parse("..... date string")
4
Bret Weinraub