コンピュータの時法
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/07/17 10:02 UTC 版)
コンピュータの内部時計は、日とは無関係の秒だけを用いた時法が用いられる。dateコマンドなどによる表示は、内部時刻をユーザーの地域の地方時に換算したものである。 多くのOSのインストーラが、インストール手続きの大抵は最後のほうで、地域の指定を入力させるのは、そういったコマンドが参照するためのタイムゾーンの設定(多くはファイル)を、そのマシンを運用する地域のものにするためである(実際には、これにはもっとややこしい事情が絡む。MS-DOSにそのようなシステムや慣習が無かったため、デファクトスタンダードであったPC/AT互換機ではRTCを地方時に設定するのがデファクトスタンダードであった。そのため、起動時やインストール直後などにRTCを参照して「秒だけを用いた時法」を初期化する際に、タイムゾーンの設定を元に世界時を逆算してから初期化しなければならないためである。そのようにして設定された「日とは無関係の秒」からさらに換算されて、前述のようにユーザ向けに表示するための時刻が算出されている)。 Unix系のシステム多くでは、内部時刻を1970年1月1日0時0分0秒(GMT)を起点(元期Epochすなわち0)とし、それから経過した秒数で表す(UNIX時間)。以前、多くはこれを32ビット符号付整数として扱っていた。他に1970年1月1日0時0分0秒からの経過時間を64ビットのミリ秒で表したり(Java)、1904年1月1日からの経過秒数を倍精度浮動小数点数で表す(REALbasic)例もある。NTPでは1900年1月1日0時0分0秒 (UTC)を起点とし、そこから経過した秒数を32ビット符号なしで表す。 しかし実は、厳密には「経過した秒数」を管理しているわけではない。本当に「経過した秒数」で管理しているならば、閏秒によって、2017年現在で30秒近い挿入された秒を算入したものでなければならないが、ほとんどのUnix系システムではそのような運用はされておらず、「(世界時による)現在の日付と時刻」を元に「閏秒の存在を無視して」求めた秒数、が、本当のここで扱っている、システムの時刻とされる値、である(そのため、閏秒が挿入されている1秒間におけるシステム時刻の扱いには注意が必要で、例えば時間が1秒巻き戻ったように見えるシステムなどがあり得る)。 これら秒数のカウンタは上限が決まっているため、いつかは桁あふれ(オーバーフロー)を起こし、それ以降の時刻に対しては正しい演算が行えなくなる。上述したUNIXの方式では2038年1月19日にあふれる2038年問題、NTPでは同様に2036年2月7日に発生する2036年問題が指摘されている。
※この「コンピュータの時法」の解説は、「時刻」の解説の一部です。
「コンピュータの時法」を含む「時刻」の記事については、「時刻」の概要を参照ください。
- コンピュータの時法のページへのリンク