うるう年問題
今日は2月29日。4年に一度の日付関係のトラブルが発生可能性が高い日です。
スラッシュドット・ジャパン | うるう年問題ありましたか?
恥ずかしながら、とあるプログラムにて「翌年」を求める処理を単純に「年++」としていたがために、「2009-02-29は存在しません」というエラーに遭遇。すぐ近くにあった「翌月」を求める処理ではちゃんと末日に丸めていたのに、何故気付かなかったのか。やはりこういった低レベルな処理は、出来合いのライブラリに任せるのが一番だと改めて痛感。
ちなみに、うるう日(2/29)から「1年後」は2/28と末日に丸めるのが一般的らしい。例えば、うるう日にMySQLのプロンプトから
SELECT NOW() + INTERVAL 1 year;
と叩いてみると、2009-02-28(の同時刻)が返ってくる。「365日後」と考えると3/1(ないし「366日後」で3/2)になるが、「1年後」に月が変わってしまうのは想定しないのが当然か。