2013-03-27 18 views
8

Ben burada Ubuntu 12.04 değilim, ve görebilirsiniz:Sistem zaman dilimini Ruby'de geçersiz kılabilir miyim?

$ cat /etc/timezone 
America/Phoenix 

Buna göre Time olmayan bir UTC dilimi olmayan bir zaman dönecektir:

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

ben sistem saatini geçersiz kılabilir TZ ortam değişkeni kullanarak bölge:

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

var anyw mı Bu değişimi programlı olarak, Ruby işleminde yapabilir miyim?

+0

Sorunuz oldukça belirsiz. Bazı bağlamın sağlayacağı yardımın değerini abartmayın. – BM5k

cevap

8

için bir takma ad:

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

da bu cevabı bakın: Set time zone offset in Ruby Bu,

with_time_zone 'UTC' do 
    # do stuff 
end 

# now TZ is reset to system standard 
gibi bir şey yazmanın bir yolunu sağlar.
1

Time#gmtime'u kullanabilirsiniz. Örneğin

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 da çalışır ve de ENV karma erişerek yakut içinden ortam değişkenleri ayarlayabilirsiniz Time#gmtime

+0

UTC tabanlı zamanların nasıl elde edildiğini anlamak için bu harika, ancak gereken saat dilimi UTC olmadığında yardımcı olmaz. – javawizard

1

Kullanım durumuna bağlı olarak, ActiveSupport bir çok TimeZone ile ilgili iyilik sunar.

$ 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, istediğinizden daha büyük bir bağımlılık olabilir, ancak gözden kaçırmamalısınız.

İlgili konular