ほぼ雑記的メモ
ある地域の時刻を取得するというのは結構厄介な問題だなぁと思う事案に出会ったのでメモを書いておきます。
前の日というのは今日が1日だと面倒なんですよね。30だったり31だったり29だったり28だったりするんで。そこでついつい以下のようなコードを書いてしまったりすると。
now = Time.new.local now = now - 3600 * 24 #24hour puts now.strftime("%Y-%m-%d"))
だけどこれは問題があるんですよね。具体的にはロンドンで(タイムゾーンは英国夏時間)、今が 2012-10-28 23:30:00 ならば誤動作をします。ちょっと書き直して次のように実行してみれば分かると思うのですが
ENV['TZ'] = 'Europe/London' now = Time.local(2012,10,28,23,30,0) puts now.strftime("%Y-%m-%d") yesterday = now - 3600 * 24 #24hour puts yesterday.strftime("%Y-%m-%d")
なんと24時間前も10月28日です。
結論から先に言うとサマータイムを勘案してないからです。日本みたいに常にUTCから9時間進んでいる国にいると実感がないけれど、イギリスでは2012年は10/28の深夜1時に夏時間から冬時間い切り替わっています。よって10/28だけは1日が25時間あるわけです。よって、24時間引いても同じ日になってしまう時間があるわけです。
これは面倒でもうるう年を考慮して1引くのが早いようで
Powered by Red Leaf ( Rev. f9d14469e ), © Issei Numata, 2007-2025
コメント一覧