月の末日に気をつけろ!
たとえば、データ中に日付けデータがあって、それをDBへインポートするとします。
通常、日付けデータの正当性は、DB側でもチェックしますので、エラーの場合はインポートがアベンド(abnormal end)します。
で、データを目視チェックするわけですが、データ中に4/31や11/31が紛れ込んでいるケースが多々あるのです。
しかし、目視チェックしている本人が、4月末日は30だったかな・・・31だったかなレベルだとザルチェックになるわけです。
ここで、末日を整理しときます。
- 末日30 - 4月、6月、9月、11月
- 末日31 - 1月、3月、5月、7月、8月、10月、12月
- 末日28 - 2月(閏年の末日は29)
覚えにくいですね。
奇数月が31で偶数月が30日などの規則が全然ないですね。
実は、何世紀も昔は、奇数月が31、偶数月が30日で、奇数と偶数が交互する規則性があったのです。
また、その昔、ローマ皇帝が月に自分の名前をつける慣わしがありました。
で、アウグストゥスという皇帝が、8月を自分の名に変更するときに、30日だと1日少ないから嫌だと、8月の日数を増やしてしまったのです(何と云うワガママ)。
なので、末日31は、本当は奇数月なのに、8月からは偶数月になってしまったのです。
皇帝アウグストゥスのワガママで、後のプログラマが苦労する羽目になったわけです。