第2章 日付と時刻の設定

最新のオペレーティングシステムは、以下の 2 つのタイプのクロックを区別します。
  • リアルタイムクロック (RTC) は、一般に ハードウェアクロック と呼ばれます。これは通常、システムボード上の集積回路で、オペレーティングシステムの現行状態からは完全に独立しており、コンピューターがシャットダウンしても稼働しています。
  • システムクロックソフトウェアクロック とも呼ばれ、カーネルが維持し、その初期値はリアルタイムクロックに基づいています。システムが起動するとシステムクロックは初期化され、リアルタイムクロックとは完全に独立したものになります。
システム時間は常に 協定世界時 (UTC) で維持され、必要に応じてアプリケーション内でローカル時間に変換されます。ローカルタイム は、夏時間 (DST) を考慮に入れた現行タイムゾーンの実際の時刻です。
Red Hat Enterprise Linux 7 では、以下の 3 つのコマンドラインツールでシステムの日付および時間に関する情報の設定および表示ができます。timedatectl ユーティリティーは Red Hat Enterprise Linux 7 で初めて導入されており、systemd の一部となります。date は従来のコマンドです。hwclock ユーティリティーは、ハードウェアクロックにアクセスするためのものです。

2.1. timedatectl コマンドの使用

timedatectl ユーティリティーは、systemd システムおよびサービスマネジャーの一部として配布されており、システムクロック設定の確認および変更ができます。このツールを使うと、現在の日付および時間の変更、タイムゾーンの設定、リモートサーバーとシステムクロックとの自動同期の有効化が可能になります。
カスタマイズした形式で現在の日付と時間を表示する方法については、「date コマンドの使用」 も参照してください。

2.1.1. 現在の日時の表示

現在の日時をシステムおよびハードウェアクロック設定の詳細情報と共に表示するには、timedatectl コマンドをオプションなしで実行します。
timedatectl
これで、ローカル、ユニバーサル、および RTC 時間と、現在使用しているタイムゾーン、ネットワーク時刻プロトコル (NTP) 設定、さらに DST に関する追加情報が表示されます。

例2.1 現在の日時の表示

以下の例は、システムクロックとリモートサーバーの同期に NTP を使用しないシステムでの timedatectl コマンドの出力です。
~]$ timedatectl
      Local time: Mon 2013-09-16 19:30:24 CEST
  Universal time: Mon 2013-09-16 17:30:24 UTC
        Timezone: Europe/Prague (CEST, +0200)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: yes
 Last DST change: DST began at
                  Sun 2013-03-31 01:59:59 CET
                  Sun 2013-03-31 03:00:00 CEST
 Next DST change: DST ends (the clock jumps one hour backwards) at
                  Sun 2013-10-27 02:59:59 CEST
                  Sun 2013-10-27 02:00:00 CET

重要

chrony または ntpd のステータスへの変更は、timedatectl によって即座に認識されません。これらのツールの設定またはステータスへの変更が行われる場合、以下のコマンドを入力します。
~]# systemctl restart systemd-timedated.services

2.1.2. 現在の時刻の変更

現在の時刻を変更するには、root でシェルプロンプトに以下を入力します。
timedatectl set-time HH:MM:SS
HH は時間に、MM は分に、SS は秒にすべて 2 桁の数字で置き換えます。
このコマンドはシステム時間とハードウェアクロックの両方を更新します。結果は、date --set および hwclock --systohc コマンドの両方を使用する場合と同様になります。
NTP サービスが有効になっていると、このコマンドは失敗します。このサービスを一時的に無効にする方法については、「システムクロックのリモートサーバーとの同期」 を参照してください。

例2.2 現在の時刻の変更

現在の時刻を午後 11 時 26 分に変更するには、root で以下のコマンドを実行します。
~]# timedatectl set-time 23:26:00
デフォルトでは、システムは UTC を使うように設定されています。ローカルタイムでクロックを維持するようにシステムを設定するには、roottimedatectl コマンドを set-local-rtc オプションと実行します。
timedatectl set-local-rtc boolean
ローカルタイムでクロックを維持するようにシステムを設定するには、booleanyes (または ytruet、または 1) に置き換えます。UTC を使用するようにシステムを設定するには、booleanno (または nfalsef、または 0) に置き換えます。デフォルトオプションは no です。

2.1.3. 現在の日付の変更

現在の日付を変更するには、root でシェルプロンプトに以下を入力します。
timedatectl set-time YYYY-MM-DD
YYYY は 4 桁の年に、MM は 2 桁の月に、DD は 2 桁の日付に置き換えます。
現在の時間を指定せずに日付を変更すると、時間が 00:00:00 に設定されることに注意してください。

例2.3 現在の日付の変更

現在の日付を 2013 年 6 月 2 日に変更し、現在の時間 (11:26 p.m.) を維持するには、root で以下のコマンドを実行します。
~]# timedatectl set-time '2013-06-02 23:26:00'

2.1.4. タイムゾーンの変更

利用可能なタイムゾーンすべてを一覧表示するには、シェルプロンプトで以下を入力します。
timedatectl list-timezones
現在使用中のタイムゾーンを変更するには、root で以下を入力します。
timedatectl set-timezone time_zone
time_zonetimedatectl list-timezones コマンドで表示される値に置き換えます。

例2.4 タイムゾーンの変更

ユーザーの位置に最も近いタイムゾーンを特定するには、timedatectl コマンドを list-timezones オプションと使用します。たとえば、ヨーロッパで利用可能なタイムゾーンすべてを一覧表示するには、以下を入力します。
~]# timedatectl list-timezones | grep Europe
Europe/Amsterdam
Europe/Andorra
Europe/Athens
Europe/Belgrade
Europe/Berlin
Europe/Bratislava
タイムゾーンを Europe/Prague に変更するには、root で以下を入力します。
~]# timedatectl set-timezone Europe/Prague

2.1.5. システムクロックのリモートサーバーとの同期

上記の説明にある手動での調節とは反対に、timedatectl コマンドでは NTP プロトコルを使ってシステムクロックを自動でリモートサーバーのグループと同期させることができます。NTP を有効にすると、chronyd または ntpd サービスのどちらかがインストールされているかに応じて、これらのいずれかが有効にされます。
NTP サービスは、以下のコマンドを使って有効、無効にすることができます。
timedatectl set-ntp boolean
システムでシステムクロックをリモートの NTP サーバーと同期させるには、booleanyes に置き換えます (デフォルトのオプション)。この機能を無効にするには、booleanno に置き換えます。

例2.5 システムクロックのリモートサーバーとの同期

システムクロックとリモートサーバーとの自動同期を有効にするには、以下を入力します。
~]# timedatectl set-ntp yes
このコマンドは、NTP サービスがインストールされていないと失敗します。詳細は、「chrony のインストール」 を参照してください。