62924


ローカルのタイムゾーンではなく UTC での [`Date.today`](https://docs.ruby-
lang.org/ja/latest/class/Date.html#S_TODAY) が知りたいのですが、Date
クラスのみからの操作で知ることはできますか？ Time クラスを使えば `Time.now.utc.to_date`
と取得できることは分かったのですが、Date クラスを使って取得することはできないのでしょうか。


CC BY-SA 4.0
2020-02-10T08:11:48.687
62923
2020-02-10T08:11:48.687
19110
question
ruby
タイムゾーンを指定した上で今日の日付 Date.today を知りたい


この回答を読んで解決しました：<https://stackoverflow.com/a/10219875/5989200>

Date はタイムゾーンを変えることを意識しておらず、常にローカル時刻を参照します。タイムゾーンを指定したい場合は Time
を使います：`Time.now.utc.to_date`。

もう少し詳しく見てみましょう。`Date.today`
の[実装](https://github.com/ruby/ruby/blob/8474e6ae1f327acb3e137c191078a522682cc946/ext/date/date_core.c#L3673)は次のようになっています。

[code]

    time_t t;
    struct tm tm;
    // ...
    if (time(&t) == -1)
      rb_sys_fail("time");
    tzset();
    if (!localtime_r(&t, &tm))
      rb_sys_fail("localtime");
    
[/code]

このあと `tm` が Date を作るのに使われます。上のコードのように `localtime()` が `tm` を作るのに使われているため、Date
が返すのはローカル時間になります。


CC BY-SA 4.0
2020-02-10T08:11:48.687
62924
2020-02-10T08:11:48.687
19110
62923
answer