gpt4 book ai didi

ruby-on-rails - Rails、Postgres 和时区

转载 作者:行者123 更新时间:2023-11-29 12:36:55 25 4
gpt4 key购买 nike

我有一个表,其中有一个名为 date 的日期时间字段。当执行 POST 以插入新行时,从客户端(浏览器)发送的日期看起来像 2015-11-20T14:30:00+10:00 这实际上是一个正确的日期并且时区。

但是,在 Postgres 中,这个日期被插入为 2015-11-20 04:30:00.000000,如您所见,这与上面的完全不同。我知道问题与时区有关。但我似乎无法找到解决办法。

有关信息,我已经配置了我的应用程序时区:

class Application < Rails::Application
config.time_zone = 'Brisbane'
end

想法?

最佳答案

2015-11-20T14:30:00+10:00表示本地时间14:30比UTC早10个小时。您的数据库字段反射(reflect)了 04:30 的正确 UTC 值。这通常是所需的行为,尤其是当值表示时间戳 - 某事发生的日期和时间(过去时)时。

在 PostgreSQL 中,有两种不同类型的时间戳字段(reference)

  • TIMESTAMP WITH TIME ZONE 字段接受包含时区偏移量的输入。然后它将值转换为 UTC 以进行存储。在检索时,它使用 session 的 timezone 设置。

  • TIMESTAMPTIMESTAMP WITHOUT TIME ZONE 仅存储给定的日期和时间,忽略任何偏移量,并且不转换为 UTC。

大多数时候,您确实应该使用TIMESTAMP WITH TIME ZONE。如果您需要保留本地日期和时间值,例如在安排 future 事件和计算营业时间时,您应该只使用 TIMESTAMP WITHOUT TIME ZONE。对于这些情况,将日期和时间拆分为单独的 DATETIME 字段通常更有意义。

最后一件事 - 如果可以避免,请避免使用 Rails time zones并使用标准 tzdb zones . “Australia/Brisbane”是相当于 Rails“布里斯类”时区的完整 tzdb 标识符。请参阅 timezone tag wiki 底部关于 Rails 时区的部分。 .

关于ruby-on-rails - Rails、Postgres 和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535929/

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