【问题标题】:Rails Time Zone and cron schedulingRails 时区和 cron 调度
【发布时间】:2013-07-23 18:56:27
【问题描述】:

我有一个 AWS 服务器,它运行关于我们用户群的每日 cron 作业报告。我想确保我的报告在 MST 的前一天运行一整天。目前我用这个作为数据查询的代码

Time.new(Time.now.year, Time.now.month, Time.now.day).yesterday.beginning_of_day.in_time_zone('MST)..Time.new(Time.now.year, Time.now.month, Time.now.day).yesterday.end_of_day.in_time_zone('MST)

我读到使用 Time.now 是不好的做法,因为那是系统 (UTC) 时间?我想知道我正在做的事情是否是一个很大的不,或者是否有更有效的方法?

谢谢!

【问题讨论】:

  • 您还有其他问题吗?或者我的回答对您的问题有用吗?

标签: ruby ruby-on-rails-3 timezone


【解决方案1】:

山地标准时间比 UTC 晚 7 小时,因此当您在 MST 中捕获从 7 月 22 日当天开始的所有数据点时,您希望 UTC 时间从 7 月 22 日上午 7:00 UTC 到 7 月 23 日世界标准时间上午 7:00。

我认为您的代码不正确,因为您在 beginning_of_day 之后调用了 in_time_zone("MST")

当您在使用 UTC 的服务器上运行此代码时,评估时间会有所不同:

>> Time.new.yesterday.beginning_of_day.in_time_zone('MST').utc
=> 2013-07-22 00:00:00 UTC
>> Time.new.in_time_zone("MST").yesterday.beginning_of_day.utc
=> 2013-07-22 07:00:00 UTC

以下是正确确定开始和结束时间的方法:

>> t = Time.new
=> 2013-07-23 19:45:10 +0000
>> start_time = t.in_time_zone("MST").yesterday.beginning_of_day
=> Mon, 22 Jul 2013 00:00:00 MST -07:00
>> end_time = t.in_time_zone("MST").yesterday.end_of_day
=> Mon, 22 Jul 2013 23:59:59 MST -07:00

当我们将开始和结束时间转换为 UTC 时,我们得到了想要的结果。

>> start_time = t.in_time_zone("MST").yesterday.beginning_of_day.utc
=> 2013-07-22 07:00:00 UTC
>> end_time = t.in_time_zone("MST").yesterday.end_of_day.utc
=> 2013-07-23 06:59:59 UTC

【讨论】:

  • 当你的代码中两个地方Time.new的执行与当天的变化时刻重叠时,这段代码会导致错误。
  • @sawa - 感谢您的评论。时区总是让我感到困惑,我同意在两个地方调用 Time.new 会导致小错误。但是,我认为在beginning_of_day 之后调用in_time_zone 会导致更大的7 小时错误。无论如何,我根据您的评论更新了代码。
【解决方案2】:

我不知道你想做什么,但是

Time.new(Time.now.year, Time.now.month, Time.now.day)

绝对是一个糟糕的代码片段。例如,如果Time.now.year的执行时间和Time.now.month的执行时间之间的时间差与年份变化的时刻重叠,那么用主Time.new创建的时间对象将不是这两个时刻。如果你想得到当前时间,就这样做

Time.new

Time.now

如果您尝试创建一个从单个时间计算出来的时间范围,那么无论您的代码应该是什么,都只创建一次时间:

t = Time.now

并在其余代码中使用它:

t.some_method..t.some_other_method

【讨论】:

  • 我正在尝试获取前一天的开始和结束时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多