Ruby=でDate.today
を呼び出すと、現在の日付が返されます。ただし、現在のタイムゾーンは何ですか?UTCを想定していますが、確認したいと思います。 ドキュメント どちらの方法でも述べていません。
TL; DR:_Date.today
_は、システムのローカルタイムゾーンを使用します。 UTCである必要がある場合は、代わりにUTC時間から日付を取得します。 _Time.now.utc.to_date
_。
日付は時間を表すものではないため、タイムゾーンはありません。
つまり、howは現在の日を計算するので、- (Date.today
_ )==からのこの抽出を見てみましょう:
_time_t t;
struct tm tm;
// ...
if (time(&t) == -1)
rb_sys_fail("time");
if (!localtime_r(&t, &tm))
rb_sys_fail("localtime");
_
次に、use tm
を使用してDate
オブジェクトを作成します。 tm
には localtime()
を使用したシステムのローカル時間が含まれているため、_Date.today
_はUTCではなくシステムのローカル時間を使用します。
いつでも _Time#utc
_ を使用してTime
をインプレースでUTCに変換できます。または _Time#getutc
_ を使用して新しい同等のものを返すことができますUTCのTime
オブジェクト。次に、その上で _Time#to_date
_ を呼び出してDate
を取得できます。つまり:_some_time.getutc.to_date
_。
ActiveSupportのタイムゾーンサポート (Railsに含まれている)を使用している場合、Rubyの時間コンストラクターから完全に分離されており、Rubyの時間コンストラクターに影響しない(つまり、_Time.now
_または_Date.today
_作業)。 ActiveSupport extensions to Time
も参照してください。
あなたは逃げることができます
Time.now.utc.to_date
rubyで
日付のインスタンスは、天文ユリウス日番号として表されます。 1日の端数部分はありません。ユリウス日はGMTに相対的ですが、技術的には日付のインスタンスはGMTであると見なす必要があります-ほとんどの場合、それを無視してタイムゾーンがないものとして扱うことができます。タイムゾーンは、DateTimeまたはTimeに変換した場合にのみ気になります。
ActiveSupportの日付変換ツールを使用すると、現地時間とUTCのどちらを使用するかを指定できます。
例えば。:
>> t = Date.today.to_time
=> Wed Apr 18 00:00:00 -0400 2012
>> t.zone
=> "EDT"
>> t = Date.today.to_time(:utc)
=> Wed Apr 18 00:00:00 UTC 2012
>> t.zone
=> "UTC"
使用できます
Date.current
構成されたタイムゾーンの現在の日付を取得します。
RailsアプリケーションがタイムゾーンUTCで実行するように構成されている場合は、Time.zone.today
を使用します。それ以外の場合は、Time.now.utc.to_date
を使用して強制します。