header

タイムスタンプの必要性

(1/2)

コンピュータに保存するデータにはタイムスタンプ(更新日時)を付けるのが定石だ。 Windows や Mac OS のデータファイルにタイムスタンプがあるのはもちろんだが、 データベースに格納されている1つ1つの情報にもタイムスタンプが付与されることが多い。 このように、タイムスタンプを使う場面は非常に多いのだが、 意外と正確なデータ形式で登録されていないプログラムが多い。なぜか。

どの時間を使うか

パソコンから日時を取得するのは簡単だ。 しかし、ネットワーク上で利用するデータとなると、 どのパソコンから取得した日時を使っているのかが問題になる。

すでに述べたように、 パソコンの内蔵時計は簡単に狂う
ここで、ブログに記事を書きこむことを考えてみよう。 2006年4月24日13時20分30秒に本文が登録され、その直後にコメントが書きこまれたとしよう。 コメントを書きこんだPCの時計が遅れており、コメントのタイムスタンプが 2006年4月24日13時20分20秒になってしまったとする。 第三者がこのブログを見たらどう思うだろうか。 本文よりコメントの方が早く書かれているということになる。 このブログの信頼性はかなり低いと解釈されても仕方ないだろう。

このような問題を避けるため、タイムスタンプの基準となる時計は1つに限定する。 一般的には、サーバの時計を利用する。

時差の問題

次に問題になるのが時差である。
インターネットは世界中からアクセスできる。 先ほどのブログの例で、本文が2006年4月24日13時20分30秒に日本で書きこまれたとしよう。 この時刻をそのままカリフォルニア州でも表示すると、アメリカ人ユーザーは違和感を感じるだろう。 なぜなら、そのとき、カリフォルニアの時計は2006年04月23日20時20分を示しているからだ。
もちろん、カリフォルニアで未来の日本のブログが読めるわけではない。両者に17時間という時差があるためだ。

このような問題を避けるため、一般的に、以下の2つの方法がとられる。

  1. タイムスタンプはローカル時間とし、 世界標準時から何時間ズレているのか明示する。 クライアント側でローカル時間に変換する。
  2. タイムスタンプは世界標準時とし、 クライアント側でローカル時間(現地時間)に変換する。

ここでいう世界標準時とは、 厳密には、協定世界時(UTC)のことである。

(この項つづく)