【问题标题】:Weird Behaviors of datetime(timezone) in Rails applicationRails 应用程序中日期时间(时区)的奇怪行为
【发布时间】:2023-03-31 14:58:01
【问题描述】:

在我们的 rails 3.2 应用程序中,我们已经配置了,

config.time_zone = 'London'
config.active_record.default_timezone = :local

并且在 postgresql 中还将时区配置为“欧洲/伦敦”。

在过去一周内,我们的申请日期时间字段无法与时区一起正常工作。

例如,如果我们创建一个提醒start_date at 2015-08-18 10AM。它在 postgres 数据库中创建 `2015-08-18 10:00:00。

在模板中显示时,

提醒start date: 2015-08-18 10AM (2015-08-18 10:00:00 +0100 )

BUT,(not always) now frequently its showing UTC time.

提醒start date: 2015-08-18 9AM (2015-08-18 09:00:00 UTC )

它无法在开发中复制。

如果我们重新启动独角兽服务器,那么它不会在 4 小时内发生。

有人遇到过这种问题吗?

【问题讨论】:

  • 在您提到的每种情况下,您用于打印日期的确切代码是什么?你会看到差异。带区域的时间和日期是您在 Rails 中需要非常小心的一个区域。
  • 在展示中,只是将AR对象@reminder提取为,.
  • 我不相信在 Rails 中设置日期时间,框架实际上不会对您的服务器或您的数据库执行相同的操作。说到时间,我强烈建议尽可能在 UTC 时间前后做所有事情,并且只在最后进行转换。
  • 有时 config.time_zone = 'London' 采用 'UTC'。我同意你的观点。我们的应用程序非常庞大。所以我们计划将来将 timezzone 更改为 UTC。但是现在这个问题很烦人。时区在所有 EC2 实例中都不稳定

标签: ruby-on-rails ruby postgresql activerecord timezone


【解决方案1】:

我通过在ApplicationController 中添加around filter 解决了这个问题。

around_filter :use_time_zone

private

def use_time_zone(&block)
  Time.use_zone('London', &block)
end

因此,每当默认时区更改为 UTC 时,它将覆盖并设置为 BST

【讨论】:

    猜你喜欢
    • 2013-05-31
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多