System time/ja

Unix システムは、システムクロックによって裏付けられるシステム時刻を時刻の把握に使用しています. これは、ハードウェアクロックまたは外部タイム・サーバーによって設定することができます.

ソフトウェアクロックとハードウェアクロック
カーネルによって提供されるシステムクロックは、1970年 1月 1日 00時00分00秒から行われたティック(訳註: タイマーの刻み)数の単純なカウントとして実装されています. これは Unix 時間 と呼ばれます.

ハードウェアクロック（また、リアルタイムクロックやRTCとして知られる）は、典型的には、メインボード上のコンポーネントです. オペレーティングシステムの状態に関係なく、コンピュータがシャットダウンしても常に実行されます.

UTC時間とローカルタイム
ハードウェアクロックの時刻は次の2つの標準を示すように変更できます: ローカルタイムまたは UTC 時間です. ローカルタイムは DST (訳註: 夏時間)も含めたタイムゾーンにおける実際の時刻です. 推奨されるのは UTC 時間です. なぜなら、システム時刻はタイムゾーンの時差と DST を加算して算出されるからです. そうすれば夏時間の変更は自動的に適用されますし、またハードウェアクロックを変更することなくタイムゾーンを変更することができます. デュアルブートのシステムを使用する場合は例外かもしれません; 他のオペレーティングシステムが UTC のハードウェアクロックをサポートしていないか、またはそのように設定されていない場合です(デフォルトでは、Windows はローカルタイムを使用します).

タイムゾーン
時刻を適切に保つには、あなたのタイムゾーン（標準時）を選び、システムがどの地域にあるのかを知らせる必要があります.

OpenRC
See Timezone (AMD64 Handbook).

systemd
systemd にはタイムゾーンを管理するための が含まれています:

現在のゾーンを確認するには:

利用可能なゾーンをリストアップするには:

タイムゾーンをたとえばドイツに変更するには:

LC_TIME
日付や時刻のフォーマットはこの環境変数 で定義されています. 詳細については The GNU C Library を参照してください.

システムクロック
通常、システムクロックの時刻は起動時にハードウェアクロックによって設定されます. 代替的には、システムクロックを手動で設定するか、ネットワークタイムサーバを使用することが可能です.

コマンドを使ってシステムクロックの時刻を管理できます:

現在のソフトウェアクロックの時刻を確認するには:

システムクロックをたとえば2016年5月6日12時34分にセットするには:

タイムサーバー
タイムサーバーの使用に関する情報については NTP の記事をご覧ください.

systemd
systemd にはシステムクロックの時刻を管理するための コマンドが含まれています:

現在のソフトウェアクロックの時刻を確認するには:

システムクロックをセットするには:

ハードウェアクロック
ハードウェアクロックを得るには、以下のカーネルオプションが有効化されていなければなりません:

実行中に現在のハードウェアクロックの時刻を確認するには:

ハードウェアクロックを現在のシステムクロックに合わせて設定するには:

ハードウェアクロックとシステム時刻を同期する
通常、ブート時にシステムクロックを設定するためにハードウェアクロックが使用されます. これはカーネル自体またはブートサービス (init スクリプト) によって行うことができます. 同様に、シャットダウン時にはカーネルまたはサービスによってソフトウェアクロックをハードウェアクロックに書き込むことができます. これは、システムがブート時に正しい時刻を得るのに役立ちます.

カーネル内方式
十分に新しいカーネル(3.9 以降)では、自動的にシステム時刻のセットを処理するように Linux を設定できます. そうするためには、Set system time ... と Set the RTC time ... というドライバーも有効化する必要があります:

Set the RTC time based on NTP synchronization は、いくつかの NTP 実装では使用されないことに注意してください. サポートされる NTP 実装には以下のものが含まれます: (詳しくは ここ を参照) と  (詳しくは NTP の記事 を参照). OpenNtpd はハードウェア時刻の設定をサポートしていませんので、避けてください.

ハードウェア時刻が更新されているか確認するには、以下を実行します:

報告された数字の64ビットはセットされていない状態(0)であるべきです. 詳細な情報は hwclock の man page にあります('11 minute mode' を検索してください).

OpenRC
OpenRC を使用している場合、 init スクリプトでブート時にシステムクロックを設定し、またシャットダウン時にシステム時刻をハードウェアクロックに同期することができます. このサービスはデフォルトでは有効化されており、前に触れたカーネル内方式を選んだ場合には無効にすべきです. カーネルのリアルタイムクロックを使用している場合には スクリプトを実行しないでください.

ただし、OpenRC を使用する必要がある場合には、 の  と   をいずれも   に設定してください. デフォルトでは、このサービスは UTC 標準時用に設定されています. ローカルタイムに変更するには  を追加します.

サービスを再起動し、ハードウェアクロック init スクリプトがシステムのブート時に起動するようにします:

Systemd
systemd を使用してブート時にシステムクロックを設定できます. ハードウェアクロックを管理するには を使用します:

現在のハードウェアクロックの時刻を確認するには:

ハードウェアクロックを現在のシステムクロック(UTC標準時)に合わせて設定するには:

ハードウェアクロックを現在のシステムクロック(ローカルタイム標準時)に合わせて設定するには:

Dual booting with Windows
Systems that dual boot with another operating system, such as Windows, generally have a struggle over the hardware clock. To make Windows not adjust the hardware clock back to local time, add the following registry entry.

For 64-bit Windows, open then browse to. Create a new QWORD entry called RealTimeIsUniversal, then set its value to. Reboot the system. The clock should now be in UTC time.

参考

 * Network Time Protocol
 * NTP - ネットワークタイムプロトコルの実装の1つ.
 * OpenNTPD - OpenBSD から移入された軽量な NTP サーバー

外部の情報

 * http://lifehacker.com/5742148/fix-windows-clock-issues-when-dual-booting-with-os-x - RealTimeIsUniversal をセットした MS Windows とのデュアルブート. Windows 10 でもテスト済みです.
 * http://tldp.org/HOWTO/Clock-2.html - クロックについてのちょっとしたHOWTO.