2012-01-03 76 views
15

Vì vậy, hiện tại là 2:54 PM PST ở San Francisco. Vì lý do nào đó, khối mã này không trả lại 12:54 PM HST ở Hawaii. Am i thiếu cái gì ở đây? Tôi hy vọng mã này sẽ trả lại cho tôi thời gian hiện tại ở HawaiiTime.use_zone không hoạt động như mong đợi

Time.use_zone('Hawaii') do 
    Time.now 
end 
# => 2012-01-03 14:54:54 -0800 

Trả lời

27

này nên làm việc ok:

Time.use_zone('Hawaii') do 
    p Time.zone.now 
end 
9

Hãy thử sử dụng Time.now.in_time_zone bên trong khối của bạn để thay thế.

> Time.use_zone('Hawaii') do 
> Time.now.in_time_zone 
> end 
=> Tue, 03 Jan 2012 13:07:06 HST -10:00 
4

Time.now - thời gian sử dụng máy chủ
Time.zone.now - thời gian sử dụng đường ray ứng dụng (trong cấu hình: config.time_zone)
Time. use_zone - sử dụng múi giờ 'của bạn' cho một khối nhất định


Ví dụ này là sai, vì Time.now có thời gian trong serv của bạn er timezone và với phương thức in_time_zone dịch thời gian thành thời gian tương đương trong múi giờ Hawaii. Nhưng giờ không phải là Giờ ở Hawaii! Đó là thời gian máy chủ của bạn với utc bù đắp cho Hawaii.

Time.use_zone('Hawaii') do 
    Time.now.in_time_zone 
end 
=> Wed, 14 Aug 2013 10:33:18 HST -10:00 

Time.now.in_time_zone 
=> Thu, 15 Aug 2013 00:32:30 MSK +04:00 

Để nhận được thời gian ở Hawaii múi giờ bạn phải sử dụng

Time.use_zone('Hawaii') do 
    Time.zone.now 
end 
8

Sử dụng Time.current nếu bạn muốn now với sự hỗ trợ múi giờ. Time.now rất nguy hiểm khi làm việc trong ứng dụng nhận biết múi giờ, theo quy tắc chung tôi không bao giờ sử dụng Time.now, chỉ Time.current. Những người trợ giúp thời gian đường ray như 2.hours.ago4.days.from_now cũng dựa trên số Time.current.

Ngoài ra, đây là một bài viết tuyệt vời với một tấm cheat tuyệt vời ở dưới cùng: http://www.elabs.se/blog/36-working-with-time-zones-in-ruby-on-rails

Các vấn đề liên quan