Tôi đã đặt múi giờ ở /config/application.rb
và tôi hy vọng tất cả thời gian được tạo trong ứng dụng của tôi ở múi giờ này theo mặc định, nhưng khi tôi tạo đối tượng DateTime
mới (sử dụng .new
), nó sẽ tạo trong GMT
. Làm thế nào tôi có thể làm cho nó được trong múi giờ của ứng dụng của tôi?Cách tạo đối tượng DateTime mới trong một múi giờ cụ thể (tốt nhất là múi giờ mặc định của ứng dụng của tôi, chứ không phải UTC)?
/config/application.rb
config.time_zone = 'Pacific Time (US & Canada)'
IRB
irb> DateTime.now
=> Wed, 11 Jul 2012 19:04:56 -0700
irb> mydate = DateTime.new(2012, 07, 11, 20, 10, 0)
=> Wed, 11 Jul 2012 20:10:00 +0000 # GMT, but I want PDT
Sử dụng in_time_zone
không hoạt động bởi vì đó chỉ là chuyển đổi thành giờ GMT gian PDT, đó là sai thời gian:
irb> mydate.in_time_zone('Pacific Time (US & Canada)')
=> Wed, 11 Jul 2012 13:10:00 PDT -07:00 # wrong time (I want 20:10)
Điều này thực sự hữu ích! Nhưng nếu bạn muốn tạo một Thời gian trong một vùng khác với những gì bạn đã đặt config.time_zone = thành config/application.rb? – idrinkpabst
Tôi sẽ sử dụng một cái gì đó như ''2012-07-11 21: 00'.to_datetime.in_time_zone (' Eastern Time (US & Canada) ')' –
điều này thực sự không hoạt động. giả sử bạn muốn tạo múi giờ trong vùng cho 9 giờ sáng theo hướng Đông. nếu bạn làm '2012-07-11 09: 00'.to_datetime.in_time_zone (' Giờ Miền Đông (Hoa Kỳ & Canada) '), điều này sẽ cho bạn thời gian sai vì nó chuyển đổi từ UTC. nếu bạn làm '2012-07-11 09:00 Giờ Miền Đông (Hoa Kỳ & Canada)' to_datetime.in_time_zone ('Giờ Miền Đông (Hoa Kỳ & Canada)') thì điều này vẫn không hoạt động vì DateTime là không ổn định khi nói đến ánh sáng ban ngày tiết kiệm thời gian. Cách tốt nhất là tránh hoàn toàn DateTime. Bất kỳ ý tưởng? – idrinkpabst