gpt4 book ai didi

ruby - 如何使用 Ruby 和 MongoId 正确保存时区?

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:43 25 4
gpt4 key购买 nike

如果这有点菜鸟问题,请原谅:

我有一个应用程序,用户可以在其中设置自己的个人资料中的时区。

当有人添加阵容(应用特定术语)时,我执行以下操作:

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

然后我保存阵容:

Lineup.create({
:date => time.gmtime,
:uid => user._id,
:pid => product._id
})

这应该(理论上)将日期保存为 gmtime,但我在查看记录时得到以下信息:

{
"_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"
}

如您所见,日期字段是错误的 - 它仍然保持用户时区,它应该是 GMT,而不是特定时区。

如果我输出 time.gmtime,我得到正确的时间(应该保存):

2011-10-26 11:30:00 UTC (correct)

关于如何保存 GMT 日期以便实际保存 GMT 日期的任何想法?

最佳答案

看来您需要指定日期属性的字段类型。如果您希望 mongoid 正确处理区域,我会使用时间字段。

class Lineup
include Mongoid::Document
field :date, type: Time
end

您可能还想在 config/mongoid.yml 中设置以下内容

defaults: &defaults
use_utc: false
use_activesupport_time_zone: true

这听起来违反直觉,但这是使 mongoid 使用 UTC 作为默认时区的当前方法。

最后,看看 mongoid-metastamp gem 。它将为您提供更好的跨多个时区查询支持,同时仍像 native 时间字段一样无缝工作。

关于ruby - 如何使用 Ruby 和 MongoId 正确保存时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7797470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com