2013-03-27 3 views
8

私はのUbuntu 12.04にここにいるよ、と私は見ることができます。したがってTimeは、非UTCゾーンと時刻を返しますRubyでシステムのタイムゾーンを変更することはできますか?

$ cat /etc/timezone 
America/Phoenix 

を:

$ irb 
> Time.now 
=> 2013-03-27 13:44:49 -0700 
> Time.at 0 
=> 1969-12-31 17:00:00 -0700 

私はシステム時刻を上書きすることができます環境変数TZを使用するゾーン:

$ TZ=UTC irb 
> Time.now 
=> 2013-03-27 20:47:19 +0000 
> Time.at 0 
=> 1970-01-01 00:00:00 +0000 

anyw私はこの変更をRubyプロセス内でプログラム的に行うことができますか?

+0

あなたの質問はかなり曖昧です。文脈によって提供される有用性を過大評価しないでください。 – BM5k

答えて

8

の別名である:

ENV['TZ'] = 'UTC' 
Time.at 0 
#=> 1970-01-01 00:00:00 +0000 

もこの答えを参照してください。Set time zone offset in Ruby 、それはのようなものを書く方法を提供します

with_time_zone 'UTC' do 
    # do stuff 
end 

# now TZ is reset to system standard 
1

Time#gmtimeを使用できます。例えば

Time.now 
# => Wed Mar 27 16:55:11 -0400 2013 
Time.now.gmtime 
# => Wed Mar 27 20:55:14 UTC 2013 
Time.at(0) 
# => Wed Dec 31 19:00:00 -0500 1969 
Time.at(0).gmtime 
# => Thu Jan 01 00:00:00 UTC 1970 

Time#utcも動作します。また、ENVハッシュにアクセスすることによって、ルビーの中から、環境変数を設定することができTime#gmtime

+0

これは、UTCベースの時間を取得する方法を理解するのに最適ですが、必要なタイムゾーンがUTCでない場合は役に立ちません。 – javawizard

1

ActiveSupportは、ユースケースに応じて、多くのTimeZone関連の良さを提供します。

$ gem install activesupport 
$ irb 
> require 'active_support/time'   # => true 
> Time.zone = 'Pacific Time (US & Canada)' # => "Pacific Time (US & Canada)" 
> Time.zone.now       # => Wed, 27 Mar 2013 16:14:19 PDT -07:00 

ActiveSupportは、必要以上に依存する可能性がありますが、見落としてはいけません。

関連する問題