2010-06-20 11 views
9

Come viene impostato il fuso orario predefinito in ActiveSupport?TimeZone predefinito con ActiveSupport (senza Rails)

Ecco cosa sta succedendo:

irb -r 'rubygems' 
ruby-1.8.7-p174 > require 'active_support' 
ruby-1.8.7-p174 > require 'active_support/time_with_zone' 
ruby-1.8.7-p174 > Time.zone 
ruby-1.8.7-p174 > nil 

Come impostare che alla posizione corrente di default?

risposta

6

a rotaie che viene impostata in environment.rb tramite rotaie di inizializzazione

Rails::Initializer.run do |config| 
    config.time_zone = 'Pacific Time (US & Canada)' 
    # ... 

Ho appena fatto un test e quando il config.time_zone è commentata Time.zone tornerà anche nil nel progetto rotaie; quindi credo che non c'è un 'default' appena viene impostata negli inizializzatori

indovinando che conosce già questo sara 'lavoro'?

irb -r 'rubygems' 
ruby-1.8.7-p174 > require 'active_support' 
ruby-1.8.7-p174 > require 'active_support/time_with_zone' 
ruby-1.8.7-p174 > Time.zone 
ruby-1.8.7-p174 > nil 
ruby-1.8.7-p174 > Time.zone = 'Pacific Time (US & Canada)' 
ruby-1.8.7-p174 > Time.zone 
=> #<ActiveSupport::TimeZone:0x1215a10 @utc_offset=-28800, @current_period=nil, @name="Pacific Time (US & Canada)", @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>> 

Nota: il codice sopra utilizza le guide 2.2.2 le cose potrebbero essere diverse con le versioni più recenti?

redattori notare: In rotaie> = 3.0 tutte le patch di scimmia sono stati spostati al core_ext spazio dei nomi, in modo che il sopra richiedono non si estende Time. Per dopo ActiveSupport versioni utilizzano il seguente:

require 'active_support/core_ext/time/zones' 
+1

sto cercando di usare questo al di fuori dei binari :) –

+1

che conosco; quello che sto dicendo è che anche nei binari non sembra che usi un default, sembra che tu debba impostare Time.zone tu stesso in irb? ma poi di nuovo forse mi sbaglio? – house9

+0

oh! bello, grazie per averlo provato. –

2

È possibile impostare il fuso orario con i valori da 2 fonti, la sua lista corta proprio ActiveSupport (~ 137 valori, vedere ActiveSupport::TimeZone.all per andare a prendere loro) o dalle IANA names (~ 590 valori). In quest'ultimo caso è possibile utilizzare lo tzinfo gem (una dipendenza di ActiveSupport) per ottenere l'elenco o l'istanza di TZInfo::TimezoneProxy:

ad es.

ActiveSupport::TimeZone.all.map &:name 

Time.zone = ActiveSupport::TimeZone.all.first 

Time.zone = ActiveSupport::TimeZone.all.first.name 

Time.zone = ActiveSupport::TimeZone.new "Pacific Time (US & Canada)" 

Time.zone = ActiveSupport::TimeZone.find_tzinfo "Asia/Tokyo" 

elenco di tutti i paesi, tutti i fusi orari:

TZInfo::Country.all.sort_by { |c| c.name }.each do |c| 
    puts c.name # E.g. Norway 
    c.zones.each do |z| 
    puts "\t#{z.friendly_identifier(true)} (#{z.identifier})" # E.g. Oslo (Europe/Oslo) 
    end 
end 
Problemi correlati