Vui lòng giải thích cho tôi nếu vấn đề này là một vấn đề noob:Làm cách nào để lưu múi giờ chính xác với Ruby và MongoId?
Tôi có một ứng dụng nơi người dùng có thể đặt Timezones của riêng họ trong tiểu sử của họ.
Khi ai đó thêm một Đội hình (ứng dụng cụ thể thuật ngữ), tôi thực hiện như sau:
time = ActiveSupport::TimeZone.new(user.timezone).parse(
"Wednesday, 26 October, 2011 13:30:00"
)
# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ
sau đó tôi lưu Đội hình:
Lineup.create({
:date => time.gmtime,
:uid => user._id,
:pid => product._id
})
này nên (về mặt lý thuyết) tiết kiệm ngày như gmtime, nhưng tôi nhận được thông tin sau khi xem bản ghi:
{
"_id": ObjectId("4e9c6613e673454f93000002"),
"date": "Wed, 26 Oct 2011 13: 30: 00 +0200",
"uid": "4e9b81f6e673454c8a000001",
"pid": "4e9c6613e673454f93000001",
"created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200"
}
Như bạn có thể thấy trường ngày tháng là wr ong - nó vẫn duy trì múi giờ của người dùng, nó phải là GMT, không phải múi giờ cụ thể.
Nếu tôi ra time.gmtime, tôi nhận được thời điểm thích hợp (mà nên được lưu):
2011-10-26 11:30:00 UTC (correct)
Bất kỳ ý tưởng làm thế nào để tiết kiệm thời giờ để nó thực sự tiết kiệm thời giờ?
Điều này cũng hoạt động với DateTime trong các phiên bản hiện tại của Mongoid (Tôi đang ở trên 2.4.7). Xem https://github.com/mongoid/mongoid/issues/1135 –