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 | |||