【问题标题】:Rails DelayedJob run_at Time Zone discrepancyRails DelayedJob run_at 时区差异
【发布时间】:2020-05-29 06:41:48
【问题描述】:

我正在使用 Rails 延迟作业来排队作业以在特定时间运行。我在 IST 时区。延迟作业 run_at 也被配置为使用 IST TimeZone。

现在我想在 IST 下午 5:00 触发作业。我将 '05:00 pm' 作为字符串存储在我的表中,并在安排作业之前对其进行解析。

所以,

Time.parse('05:00 pm')

返回

2020-05-29 17:00:00 UTC

如果我使用 IST 解析

 Time.parse('05:00 pm').in_time_zone('Chennai')
 => Fri, 29 May 2020 22:30:00 IST +05:30

但我希望将 05:00 pm 解析为

  2020-05-29 11:30:00 UTC

以便我延迟的作业理解在 IST 下午 5:00 运行此作业。

我可以手动减少 5:30 小时并排队,但这不是我觉得正确/优化的方式。请建议我该怎么做?

【问题讨论】:

  • 您可以保存整个时间戳,而不仅仅是 05:00pm - 例如"2020-05-29T17:00:00.000+05:30"。所以没有数据丢失,在以后保存和解析的时候。如果你想节省时间"17:00:00.000+05:30".
  • 我从前端收到这个时间。所以他们总是这样返回时间
  • 您可以在保存前对其进行预处理 - Time.parse("05:00pm").in_time_zone("Chennai").to_s
  • 这种方法的问题是,如果我在 Time.parse("05:00pm").in_time_zone("Chennai").to_s 中解析 '05:00 pm' 会给我日期。但对我来说,这项工作必须每天下午 5 点运行。所以这行不通。此外 in_time_zone("Chennai") 将执行 +05:30 将返回 22:30。我不想要这个。我希望存储 11:30,以便延迟的作业在下午 5:00 运行

标签: ruby-on-rails timezone delayed-job enqueue


【解决方案1】:

你可以做类似的事情 ActiveSupport::TimeZone.new('Chennai').parse("5 pm").utc

或者理想情况下,您可以将时间存储为"17:00:00 +0530",因此很明显您指的是 IST 中的时间。然后只需 Time.parse("17:00:00 +0530").utc 也可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多