プロジェクト

全般

プロフィール

CentOS 6で日付・時刻の設定

日付・時刻を刻むもの

ハードウェアクロック

PCは電源をONしたらそれなりに正しい時刻を持つことができるように、電源がOFFの間も電池等で駆動する時計(ハードウェアクロック)を持っています。この時計はリアルタイムクロック(RTC)とかカレンダークロックも呼ばれ、マザーボード上に回路を持つことが一般的です。ハードウェアクロックは年月日時分秒を持ちますが、時間帯(タイムゾーン)の情報はないので、UTC時刻なのかローカル時刻(例えば日本時間)なのかは人間側の決め事とします。

システムクロック

ハードウェアクロックから値を読み出すのは時間がかかる処理なので、Linux他の大半のOSでは起動時に一回ハードウェアクロックから時刻を取り出したら、以降はOSがメモリ上に時刻を保持し、ハードウェアクロックとは別の高精度タイマーなどの周期(割り込み)でその時刻を更新していきます。そして終了時にシステムクロックの時刻をハードウェアクロックに書き出します。

クロックを見る

ハードウェアクロックを見る

Linux OSでは、hwclockコマンドでハードウェアクロックの持つ時刻の表示、変更ができます。
--debugオプションを指定するとハードウェアクロックから読んだ時刻などを表示します。

~$ sudo hwclock --show --debug
hwclock from util-linux-ng 2.17.2
/dev interface to clock を使います。
直前のずれの修正は 1969 年以降 1405595727 秒時点で行なわれました
直前の調整は 1969 年以降 1405595727 秒時点で行なわれました
ハードウェア時計はUTC時刻です
ハードウェア時計UTC時刻を保持しているとみなします
クロックチックを待っています...
クロックチックを取得しました
ハードウェア時計から読込んだ時刻: 2014/07/18 15:28:47
ハードウェア時計時刻 : 2014/07/18 15:28:47 = 1969 年以来 1405697327 秒
2014年07月19日 00時28分47秒  -0.031665 秒

--debugオプションを指定しないと、ハードウェアクロックの保持する時刻ではなく、それをOS側の時間帯にしたものを表示します。

hwclockは、/etc/adjtimeを見てハードウェアクロックがUTCかローカルタイムかを決めます。
/etc/adjtimeの例を以下に示します。最後の行にUTCとあればハードウェアクロックがUTCであるとして扱い、LOCALとあればハードウェアクロックがローカルタイムであるとして扱います。

-0.040164 1405595727 0.000000
1405595727
UTC

システムクロックを見る

Linux OSではdateコマンドでシステムクロックの表示、変更を行います。

  • OSの時間帯で今の時刻を表示
    ~$ sudo date
    2014年  7月 19日 土曜日 00:41:53 JST
    
  • UTC時刻で今の時刻を表示
    ~$ sudo date -u
    2014年  7月 18日 金曜日 15:41:55 UTC
    


ほぼ10年前に更新