Excelの日付時刻情報が処理しにくい話

私も仕事の関係でExcelなどを使うことがあるが、Excelの日付時刻情報の使いにくさは何とかならないものか。まあ、他の表計算のソフトの状況は知らないのだけど。

何を言いたいのかというと、Excelの日付時刻情報は浮動小数点数で表現されている。1.0が1日。これが曲者だ。1秒はどの値かというと、1/(24*60*60)=約0.00001157407407407407であり、10進の浮動小数点数では正確に表現することはできない。人類は1日の中の時間を表現する時、24進数と60進数を併用している。秒以下の部分(ms, us, ns…)は10進数だが、24進数と60進数を10進数(実際は2進数)の小数で表現するのは無理があると思う。

Excelで日付時刻情報を縦もしくは横軸にとってグラフ化するとき、10秒単位で目盛をつけたいと思ったとする。軸のプロパティから目盛単位を変更するのだけど、どうしたらいいのだろう? 確か「00:00:10」が正解なのだが(ちょっと手元にないので確認できない)、なんだかなぁという気がする。目盛単位を修正するとき、得体の知れない小数に直されているので、ちょっと10秒を3秒にしたいんだ、というときに10を3にするような手軽さはなく、結局分かりにくいので、何だっけ、SECとかMINUTEとかの関数を組み合わせて秒単位の整数を作ってグラフ化するのが楽ということに(私の中では)なった。

コンピュータで日付時刻を表現するとき、少なくとも私の分野ではコンピュータにおける紀元(EPOCH)からの秒数で表現するという手法が一般的だ。EPOCHは1970年1月1日の00:00:00 GMT。秒以下の精度が必要な場合は、Cのstruct timevalのように秒とusの2つの整数を合わせて使うか、Pythonのように浮動小数点数にするか(usの精度を確保するには仮数部が31+20=51ビット以上あればいいので普通の倍精度浮動小数点数で大丈夫)。これがもっとも単純だ。60進数、24進数といえども整数ならば単純で、整数を整数(60や24)で割ったり剰余を取れば簡単に処理できる。

まあよくよく考えると、精度としては1.0が1日を示すか1秒を示すかに優劣はない。でもなんか気持ち悪いし、実際に処理しにくかったことがあったので書いてみました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です