45

Date.todayRuby で呼び出すと、現在の日付が返されます。しかし、それはどのタイムゾーンにありますか?UTCを想定していますが、確認したいです。ドキュメントには、どちらの方法も記載されていません。

4

6 に答える 6

50

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にいつでも使用できます。次に、それを呼び出して を取得できます。だから:。TimeTime#getutcTimeTime#to_dateDatesome_time.getutc.to_date

ActiveSupport のタイム ゾーン サポート(Rails に含まれる)を使用している場合、これは Ruby の時間コンストラクターとは完全に分離されており、それらに影響を与えないことに注意してください (つまり、方法Time.nowや動作は変わりませんDate.today)。への ActiveSupport 拡張機能Timeも参照してください。

于 2012-04-19T00:06:48.610 に答える
11

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"
于 2012-04-19T00:07:25.527 に答える