RubyでDate.today
を呼び出すと、現在の日付が返されます。しかし、それは何のタイムゾーンですか?私はUTCを想定していますが、確かめたいと思います。 documentationはいずれの方法も示していません。Date.todayはUTCですか?
答えて
日付は時刻を表していないため、日付にはタイムゾーンがありません。言っ
、用として、それは現在の日付の計算方法、のはthe code for 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");
それは、その後Date
オブジェクトを作成するために使用tm
を使用することを進めます。 tm
にはlocaltime()
を使用してシステムのローカル時刻が設定されているため、Date.today
はUTCではなくシステムのローカル時刻を使用します。
あなたは、常にUTCに新しい同等のTime
オブジェクトを返すようにTime#getutc
をUTCにその場でそれを変換、または任意のTime
にTime#utc
を使用することができます。その後、Time#to_date
に電話して、Date
を得ることができます。だから:some_time.getutc.to_date
。
あなたは(Railsの付属)ActiveSupport’s time zone supportを使用している場合、それはRubyの時間のコンストラクタから完全に分離され、それらには影響しないことに注意してください(すなわち、それがどのようにTime.now
またはDate.today
仕事を変更しません)。 ActiveSupport extensions to Time
も参照してください。
日付のインスタンスは、天文学のユリウス日番号として表されます。 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"
私が元の質問に尋ねた理由について、@ AndrewMarshallの答えに対する私のコメントを参照してください。基本的には、ローカルシステムのDate.todayがUTCのシステムのDate.todayと同じになるかどうかを調べようとしています。 –
Andrew氏によると、Date.todayはUTCではなく現地時間から日付を生成します。 時刻に対応する日付をUTCで取得するには、Time.now.utc.to_dateを試してください。 –
一部の国では、日付のタイムゾーンを無視しても問題はないことを指摘したいと思います。もしあなたがそれをすれば、ほとんどの仕事日。 (例えば、2月13日の午前10時は12日、2100 UTCと思われます)。 – Rich
あなたのレールのアプリケーションがタイムゾーンUTCで実行するように構成されている場合は、単にTime.zone.today
を使用ルビー
受け入れられた答えよりもはるかに優れています。 2012年4月以降にこれが追加されたのだろうかと思います。 –
これは役に立つ情報ですが、質問に答えられません。これは関連する質問に答えます。「現在のUTC時間の日付を取得するにはどうすればよいですか?」というポスターには、Date.todayがUTCであったかどうかが尋ねられ、utcで日付を取得する方法ではありません。 –
に
Time.now.utc.to_date
を使用して逃げることができますそれ以外の場合は、Time.now.utc.to_date
あなたは、設定されたタイムゾーンの現在の日付を取得するには
Date.current
を使用することができます。
ご清聴ありがとうございます。私は私の質問をするより良い方法は、 "どのようなタイムゾーンとDate.todayが翌日に戻ってくるのか?私は "今日の日付はUTC"にしたいと思っていますが、私は 'Time.now.zone.to_date'(Railsで)のようなことをする必要があります。 –
'Time.zone.now.to_date'は、アプリケーションが設定されているタイムゾーンを使用します。特定のコードブロック(この場合はUTC)のタイムゾーンを設定する場合は、Time.use_zone( '[zone name]')を調べることをお勧めします。 –
はい、ActiveSupportのタイムゾーン管理では、 'Date.current'に等しい' Time.current.to_date'に等しい 'Time.zone.now.to_date'を行うことができます。 –