日時を数値(シリアル値)で数えるという工夫
日時や時間を計算したいことはよくあります。しかし数値は10進数、秒と分は60進数、時間は24進数。一緒に扱うにはチト厄介です。コンピュータの中では基準日を決めてそこからの経過日数や経過時間(シリアル値)として計算しています。
基準日からの経過日数で管理するという特性上、こんなことが起こります。
エクセルに1990/1/1以降の日付を入力すると右寄りになります。数値として認識されています。
しかし1899/12/31を入力すると左寄りになります。
文字列として認識されているからです。
値から日時に変換してみる
1900/1/1が数値と言われてもピンとこないので、こんな実験もしてみます。
1を入力しておきます。
Ctrl + Shift + 3 でシリアル値の表記を「yyyy/mm/dd」形式に変更できます。
1ではなく0ではどうなるでしょうか。起点という点ではこちらが基準日といえるかもしれません。
1900年1月0日。これが基準のようです。
2038年問題とは
基準日からの経過日数で日時を管理するのはエクセル特有のことではありません。Windowsの前に登場していたUnixというOSは現在のコンピュータに大きな影響を残しています。
Linuxという名を聞いたことはあるかもしれません。PC Unixと言われるパソコン上で動くUnixです。そんなUnixには2038年問題という問題があります。
1970年1月1日0時0分0秒からの経過秒数をカウントしているOSが、32bitのカウンタを使い切って経過時間ゼロ(つまり基準日)に戻ってしまうというものです。
具体的には、2038年1月19日12時14分7秒が32bitのカウンタの限界です。
Unixではありませんが、Windowsもいつの間にか32bitではなく64bitが主流となりましたが、これもまた32bitのカウンタの限界を超えるためなのです。
カレンダーに限らず、扱えるファイルサイズや搭載できるメモリの限界容量の変遷もまた、ビット数が深くかかわっています。
コメント