System time/ja

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

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

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

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

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

OpenRC
タイムゾーン（AMD64のハンドブック）を見てください.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

カーネル内方式
十分に新しいカーネル(3.9 以降)では、自動的にシステム時刻のセットを処理するように Linux を設定できます. そうするためには、Set system time from RTC on startup and resume（ CONFIG_RTC_HCTOSYS ） と Set the RTC time based on NTP synchronization（ CONFIG_RTC_SYSTOHC ） というカーネルオプションを有効化する必要があります:

Set the RTC time based on NTP synchronization カーネルオプションは、現在 chrony 、NTP そして バージョン5.9p1以降のOpenNTPD に対応しています.

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

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

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

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

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

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

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

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

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

Windowsとのデュアルブート
Windowsのような他のオペレーティングシステムとデュアルブートしているシステムは、一般的にハードウェアクロックで苦労します. Windowsがハードウェアクロックをローカルタイムに戻さないようにするために、以下のレジストリ項目を追加してください.

64ビットWindowsでは、を開き、を見てください. RealTimeIsUniversal というQWORD項目を作成、値に を設定し、システムを再起動してください. これでクロックはUTC時刻となっているはずです.

関連項目

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

外部の情報

 * https://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.