Rails时区和cron调度



我有一个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)

我读到使用时间是不好的做法。这是系统(UTC)时间吗?我想知道我所做的是不是一个很大的拒绝,或者是否有更有效的方法?

谢谢!

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

我认为您的代码不正确,因为您在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(Time.now.year, Time.now.month, Time.now.day)

绝对是一个糟糕的代码片段。例如,如果Time.now.yearTime.now.month的执行时间之间的时间滞后与年份变化的时刻重叠,则使用主Time.new创建的时间对象将不是这两个时刻中的任何一个。如果你想获得当前时间,只需进行

Time.new

Time.now

如果你试图创建一个由单个时间计算的时间范围,那么无论你的代码应该是什么,只创建一次时间:

t = Time.now

并将其用于代码的其余部分:

t.some_method..t.some_other_method

相关内容

  • 没有找到相关文章

最新更新