0

私は、ユーザー ベースでレポートする毎日の cron ジョブを実行する AWS サーバーを持っています。レポートが MST で前日の丸 1 日実行されるようにしたいと考えています。現在、これをデータクエリのコードとして使用しています

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) 時間であるため、使用するのは悪い習慣であると読みましたか? 私がやっていることは大したことではないのでしょうか、それとももっと効率的な方法があるのでしょうか?

ありがとう!

4

2 に答える 2

2

山地標準時は UTC から 7 時間遅れているため、7 月 22 日からすべてのデータ ポイントを MST で取得する場合、UTC 時間は 7/22 の 7:00AM UTC から 7/23 の 7:00AM になる必要があります。 UTC。

in_time_zone("MST")の後に呼び出しているため、コードが正しいとは思いませんbeginning_of_day

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
于 2013-07-23T19:15:51.643 に答える