13章カレンダーとクロック

鐘楼の時計が1回鳴る。1時だ。

しかし、つい60分前には、

12回鳴ってしょうを知らせたのだ。

──フレデリック・B・ニーダム, “時計のラウンド”

カレンダーには書いてあるんだけど、

時間に間に合ったことはないわ。

──マリリン・モンロー

 プログラマたちは、日付と時刻に驚くほどの労力を捧げている。彼らがぶつかる問題について少し説明してから、状況を少しなりともすっきりさせるベストプラクティスとトリックを紹介しよう。

 日付はさまざまな方法で表現できる。実際、方法が多すぎるのだ。英語のグレゴリオ暦でも、単純な日付の書き方が次のようにたくさんある。

  • July 21 1987
  • 21 Jul 1987
  • 21/7/1987
  • 7/21/1987

 特に問題なのは、日付の表現が曖昧になる場合があることだ。前の例では、7月21日であるとはすぐにわかる。21月はあり得ないからだ。しかし、1/6/2012だったらどうだろうか。これは1月6日のことだろうか、それとも6月1日のことだろうか。

 月名は、グレゴリオ暦を採用している国の言語の間でもまちまちだ。年と月でさえ、文化が異なれば定義が異なることがある。

 時刻には時刻特有の厄介な問題がある。特に大きいのは各地の標準時間帯の違いとサマータイムの問題だ。標準時間帯の地図を見ると、標準時間帯は経度が15度(360度/24)ずれるごとに変わるのではなく、政治的歴史的な理由で境界が引かれていることがわかる。そして、サマータイムの開始日と終了日は国によってまちまちだ。それだけにとどまらず、南半球の国々が時計を進める頃には、北半球の国々は時計を戻し、逆も行われる。なぜそうなのかは、少し考えればわかるだろう。 ...

Get 入門 Python 3 第2版 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.