2010-06-20 34 views
9

Thời gian mặc định được đặt trong ActiveSupport như thế nào?Mặc định TimeZone với ActiveSupport (không có Rails)

Đây là những gì đang xảy ra:

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 

Làm thế nào để thiết lập đó đến vị trí hiện tại theo mặc định?

Trả lời

6

trong đường ray nó được đặt trong environment.rb qua đường ray initializer

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

tôi chỉ làm một bài kiểm tra và khi config.time_zone là nhận xét ra Time.zone cũng sẽ trở lại con số không trong dự án đường ray; vì vậy tôi đoán không có 'mặc định' nó chỉ được thiết lập trong initializers

Đoán bạn đã biết điều này sẽ 'làm việc'?

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>> 

Lưu ý: mã trên có sử dụng đường ray 2.2.2 mọi thứ có thể khác với phiên bản mới hơn?

biên tập ghi chú: Trong đường ray> = 3.0 tất cả các bản vá lỗi khỉ đã được di chuyển đến không gian tên core_ext, vì vậy yêu cầu trên không mở rộng Time. Cho sau này ActiveSupport phiên bản sử dụng như sau:

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

Tôi đang cố gắng để sử dụng bên ngoài này của đường ray :) –

+1

tôi biết; những gì tôi nói là ngay cả trong đường ray nó không xuất hiện để sử dụng một mặc định, có vẻ như bạn sẽ cần phải đặt Time.zone mình trong irb? nhưng sau đó lại có thể tôi đã sai? – house9

+0

oh! mát mẻ, cảm ơn bạn đã thử nghiệm điều đó. –

2

Bạn có thể đặt múi giờ với giá trị từ 2 nguồn khác nhau, danh sách ngắn ActiveSupport riêng của mình (~ 137 giá trị, xem ActiveSupport::TimeZone.all để lấy chúng) hoặc từ IANA names (~ 590 giá trị). Trong trường hợp cuối cùng này, bạn có thể sử dụng số tzinfo gem (phụ thuộc của ActiveSupport) để nhận danh sách hoặc ví dụ: TZInfo::TimezoneProxy:

ví dụ:

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" 

Liệt kê tất cả các nước, tất cả các múi giờ:

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 
Các vấn đề liên quan