2010-06-20 11 views
9

¿Cómo se configura el TimeZone predeterminado en ActiveSupport?TimeZone predeterminado con ActiveSupport (sin rieles)

Esto es lo que está pasando:

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 

¿Cómo se configura que la ubicación actual por defecto?

Respuesta

6

en los carriles que se vuelve a establecer en environment.rb a través de los rieles inicializador

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

que acabo de hacer una prueba y cuando el config.time_zone está comentado Time.zone también volverá nula en el proyecto de carriles; así que supongo que no hay un 'predeterminado', simplemente se establece en los inicializadores

Supongo que ya sabes que esto 'funcionará'?

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: el código anterior está utilizando los carriles 2.2.2 ¿las cosas pueden ser diferentes con las versiones más nuevas?

Nota del editor: En los carriles> = 3.0 todos los parches de monos han sido trasladados a la core_ext espacio de nombres, lo que lo anterior requieren no se extiende Time. Para más adelante ActiveSupport versiones usan la siguiente:

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

estoy tratando de utilizar este fuera de los carriles :) –

+1

que conozco; Lo que estoy diciendo es que incluso en los rieles no parece usar un valor por defecto, parece que tendrás que configurar Time.zone en IRB? pero, de nuevo, ¿tal vez estoy equivocado? – house9

+0

¡oh! genial, gracias por probar eso. –

2

Es posible ajustar la zona horaria con los valores de 2 fuentes, su propia ActiveSupport lista corta (~ 137 valores, vea ActiveSupport::TimeZone.all a buscarlos) o de los IANA names (~ 590 valores) En este último caso, puede usar el tzinfo gem (una dependencia de ActiveSupport) para obtener la lista o instancia TZInfo::TimezoneProxy:

p.

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" 

Lista de todos los países, todas las zonas horarias:

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