2075 暦データ はくぶん 2009-10-11 03:49:24
右側のタイムスタンプのソースとして使用している暦データ。
昨日の時点での取得済みデータは2009年1月1日から10月31日までの10ヶ月分。
しかし、これから毎月下旬になると翌月のデータが追加されていくので、
将来的には特に何も問題はない。

しかし、2008年以前を調べたい時は、そのデータがないので困る。
そこで、データのソース元である暦のサイトをチェックしてみると、
そこの暦データはどうやら1900年1月1日から入手可能であることが判明した。

というわけで、この数時間、そのデータ収集に追われていた。

1900年1月1日から2009年10月31日までの約109年分、
延べ40,116日分のデータをウェブから一気に自動取得することになる。
途中で送受信エラー等により、取得ミスが発生する可能性もあるので、
取得したデータはすべて検証しなければならない。
もちろん、一つ一つ手作業で確認するなど到底不可能な数である。

というわけで、自動取得スクリプトと自動検証スクリプトを作成。

実際にそれらを走らせてみる。
結果、やはり何らかのエラーにより、丸々1ヶ月分のデータが取得できていなかった。
後でその部分を手作業で補完し、無事40,116日分のデータを取得完了。

なかなか手応えのある作業だった。

ちなみに、日付け処理の場合、厄介なのが閏年だが、
----------------------------------
4で割り切れる年は閏年
ただし、100で割り切れる年は平年
ただし、400で割り切れる年は閏年
----------------------------------
と定義されている。

これをC言語の数式で表すと、
year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
とするのが正しい判定法であるとウィキペディアには書いてある。
Perlなら、
$year % 4 == 0 && ($year % 100 != 0 || $year % 400 == 0)
となる。
しかし、400で割り切れる数字は、必ず4でも割り切れるので、
($year % 4 == 0 && $year % 100 != 0) || $year % 400 == 0
とする方が、よりスマートではないだろうか。

まあ、どちらの数式を使っても、実際の処理時間に、ほとんど差はないだろうが。

というわけで、40,116日分のデータが完備されたので、
この掲示板の表示所要時間は若干遅くなったかもしれない。
メッセージ文字数:1041/1087