うるう年問題

今日は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年後」に月が変わってしまうのは想定しないのが当然か。