2010-09-25 62 views
9

Trong config/application.rb Tôi có "config.time_zone = 'UTC'" (không có dấu ngoặc kép) trong tệp. Tôi giả định điều này là để thực hiện chuyển đổi từ thời gian của người dùng, được nhập vào dạng xem, đến UTC, được lưu trữ trong cơ sở dữ liệu. Câu hỏi của tôi là, làm cách nào để chuyển đổi giá trị UTC từ cơ sở dữ liệu sang thời gian cục bộ của người dùng để hiển thị trong chế độ xem? Tôi đã đọc rằng đường ray tự động xử lý điều đó - làm thế nào để tôi nói nó làm điều này?Hiển thị giờ địa phương ở chế độ xem

Tôi có trường múi giờ trong hàng của từng người dùng trong cơ sở dữ liệu, tôi cũng không chắc chắn nên lưu trữ gì trong đó. Tôi biết về thời gian cào: các khu: tất cả - Tôi chỉ không biết làm thế nào tất cả điều này phù hợp với nhau trong đường ray 3!

Cảm ơn bạn,

sk

Trả lời

15

Khi làm việc trong môi trường đa khu vực đó là khôn ngoan để có múi giờ thiết lập để UTC. Đó là hoàn toàn hợp lệ trong application.rb bạn

Rails sẽ tự động chuyển đổi tất cả các thời gian để các hiện múi giờ, có thể được thiết lập với

Time.zone = "some-zone" 

Những gì tôi sử dụng là một before_filter trong ApplicationController nơi tôi đặt múi giờ theo người dùng hiện tại. Sau đó, tất cả các hoạt động hoạt động trong khu vực này và bạn không cần phải suy nghĩ về nó trong bộ điều khiển/mô hình/khung nhìn của bạn.

Giả sử bạn có một số mẫu Foo với một số trường datetime. Sau đó, làm việc trong bảng điều khiển irb:

Time.zone = "Prague" 
x = Foo.create(:it_will_happen_at => Time.zone.now) 
x.it_will_happen_at # => Sat, 25 Sep 2010 13:45:46 CEST +02:00 

Time.zone = "London" 
# it is needed to refresh the field after a time zone has changed. 
# In normal situation it'd not be needed, it's just for this console example 
x.reload 
x.it_will_happen_at # => Sat, 25 Sep 2010 12:44:46 BST +01:00 

Khi bạn xem xét DB, bạn sẽ thấy giá trị đó là Sat, 25 Sep 2010 11:45:46 UTC.

Đối với giá trị khu vực, tôi thích tên của các thành phố hơn vì nó hoạt động trơn tru với tiết kiệm ánh sáng ban ngày (mùa hè/mùa đông).

+0

Cảm ơn bạn - đề xuất của bạn hoạt động hoàn hảo! – dingalingchickenwiing

+0

đã tiết kiệm thời gian của tôi !! nên đã tìm thấy điều này trước đó. –

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