2013-03-27 11 views
8

Sono qui per Ubuntu 12.04, e posso vedere:Posso ignorare il fuso orario del sistema in Ruby?

$ cat /etc/timezone 
America/Phoenix 

conseguenza Time restituirà un tempo con una zona non UTC:

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

posso ignorare l'ora di sistema zona utilizzando la variabile TZ ambiente:

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

c'è anyw posso apportare questa modifica a livello di codice, all'interno di un processo di Ruby?

+0

La tua domanda è piuttosto vaga. Non sopravvalutare l'utilità che alcuni contesti potrebbero fornire. – BM5k

risposta

8

È inoltre possibile impostare le variabili d'ambiente dall'interno rubino accedendo al ENV hash:

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

vedere anche questa risposta: Set time zone offset in Ruby , Fornisce un modo per scrivere qualcosa come

with_time_zone 'UTC' do 
    # do stuff 
end 

# now TZ is reset to system standard 
1

È possibile utilizzare Time#gmtime. Per esempio

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 funziona anche ed è un alias per Time#gmtime

+0

Questo è ottimo per capire come ottenere tempi basati su UTC, ma non aiuta quando il fuso orario necessario non è UTC. – javawizard

1

A seconda del caso d'uso, ActiveSupport offre un sacco di qualità correlata a 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 può essere una dipendenza più grande di quanto si desideri, ma non si deve trascurare.

Problemi correlati