Date.today
Ruby で呼び出すと、現在の日付が返されます。しかし、それはどのタイムゾーンにありますか?UTCを想定していますが、確認したいです。ドキュメントには、どちらの方法も記載されていません。
6 に答える
TL;DR: Date.today
システムのローカル タイム ゾーンを使用します。UTC である必要がある場合は、代わりに UTC 時間から日付を取得しますTime.now.utc.to_date
。
日付は時間を表していないため、タイムゾーンはありません。
とはいえ、現在の日付を計算する方法については、次のコード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
には を使用したシステムの現地時間が含まれているため、UTC ではなくシステムの現地時間を使用しますlocaltime()
。Date.today
インプレースで UTC に変換したり、新しい同等のオブジェクトを UTC で返すためTime#utc
にいつでも使用できます。次に、それを呼び出して を取得できます。だから:。Time
Time#getutc
Time
Time#to_date
Date
some_time.getutc.to_date
ActiveSupport のタイム ゾーン サポート(Rails に含まれる)を使用している場合、これは Ruby の時間コンストラクターとは完全に分離されており、それらに影響を与えないことに注意してください (つまり、方法Time.now
や動作は変わりませんDate.today
)。への ActiveSupport 拡張機能Time
も参照してください。
Date のインスタンスは、天文学的なユリウス日番号として表されます。1 日の小数部分はありません。ユリウス日は GMT を基準としていますが、技術的には Date のインスタンスは 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"