日時の設定 - Arch Linuxの最小限インストール直後の作業(2)

日時の設定は、インストール時または[Arch Linuxの最小限インストール](https://qiita.com/j8takagi/items/235e4ae484e8c587ca92#_reference-3a1f60eef45deadcc6c8 "Arch Linuxの最小限インストール - Qiita")の完了直後に行うべき作業のひとつです。

時刻の設定にあたっては、Arch LinuxなどのOSではシステムクロックとハードウェアクロックという2種類の時計を使われていることが前提知識となります。

システムクロックは、OSが動作している間だけ時を刻みます。OSがブートするときに、ハードウェアクロックの日時をもとにシステムクロックが設定され、OSがシャットダウンするときにはシステムクロックの日時がハードウェアクロックに設定されます。ハードウェアクロックは、小型電池などを電源にして、コンピューターの電源が落ちている間も時を刻みます。

システムクロックは、NTP（Net Time Protocol）によってインターネット上のサーバーと同期することで、日時を正確に保つことができます。

現在の日時の設定は、timedatectlコマンドで確認できます。

```
[root@archlinux ~]# timedatectl
```

```:実行結果
           Local time: Wed 2018-10-24 08:17:31 UTC
       Universal time: Wed 2018-10-24 08:17:31 UTC
         RTC time: Wed 2018-10-24 08:17:32
        Time zone: UTC (UTC, +0000)
System clock synchronized: no
          NTP service: inactive
      RTC in local TZ: no
```


最小限インストール直後では、タイムゾーンが設定されていないため、日本時間と比べて9時間前にあたるUTC（協定世界時）の日時が表示されます。dateコマンドなどでも、UTCの日時が表示されます。


```
[root@archlinux ~]# date
```

```:実行結果
Wed Oct 24 08:17:50 UTC 2018
```

また、ハードウェアクロック（RTC: Real Time Clock）をローカルタイムにするかUTCにするかを設定するRTC in local TZは、通常はnoとなります。この設定は変更する必要はありません。Arch Linuxを含めたLinuxではハードウェアクロックはUTCに設定した方がトラブルが少ないとされています。詳細は、[systemd環境におけるハードウェアクロック調整](https://qiita.com/slug/items/4f902f45c5796f69309c "systemd環境におけるハードウェアクロック調整 - Qiita")などを参照して下さい。

## タイムゾーンの設定

timedatectlコマンドで、タイムゾーンを設定できます。

### 設定できるタイムゾーンの表示

timedatectl list-timezonesコマンドで設定できるタイムゾーンの一覧が表示されます。次のコマンドで、tokyoのタイムゾーンを表示できます。

```
[root@archlinux ~]# timedatectl list-timezones | grep -i tokyo
```

```:実行結果
Asia/Tokyo
```

### タイムゾーンの設定

timedatectl set-timezoneコマンドでタイムゾーンを設定できます。次のコマンドで、タイムゾーンをAsia/Tokyoに設定します。

```
[root@archlinux ~]# timedatectl set-timezone Asia/Tokyo
```

設定後、日時の設定を確認します。

```
[root@archlinux ~]# timedatectl
```

```:実行結果
           Local time: Wed 2018-10-24 17:19:15 JST
       Universal time: Wed 2018-10-24 08:19:15 UTC
         RTC time: Wed 2018-10-24 08:19:16
        Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: no
          NTP service: inactive
      RTC in local TZ: no
```

Local timeがUniversal timeの9時間後になります。dateコマンドなどでは、Local timeが出力されます。

```
[root@archlinux ~]# date
```

```:実行結果
Wed Oct 24 17:19:24 JST 2018
```

## NTPサーバーとの同期の設定

OSがインターネットに接続している場合、次のコマンドでNTPサーバーとの同期を有効にできます。

```
[root@archlinux ~]# timedatectl set-ntp true
```

設定後、日時の設定を確認します。

```
[root@archlinux ~]# timedatectl
```

```:実行結果
           Local time: Wed 2018-10-24 17:21:06 JST
       Universal time: Wed 2018-10-24 08:21:06 UTC
         RTC time: Wed 2018-10-24 08:21:07
        Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
          NTP service: active
      RTC in local TZ: no
```

System clock synchronizedがyesとなり、NTP serviceがactiveとなります。

NTP serviceがactiveとなるまでには少し時間がかかります。inactiveと表示される場合は少し時間が経ってから再度timedatectlコマンドを実行してください。

インターネットに接続していない場合、NTPサーバーとの同期は有効にできません。先に、ネットワーク接続を設定してください。

また、NTPサーバーの設定などはネットワークの設定と一緒に行います。

## 参考資料
- [時刻 - ArchWiki](https://wiki.archlinux.jp/index.php/時刻)
- [systemd-timesyncd - ArchWiki](https://wiki.archlinux.jp/index.php/Systemd-timesyncd)
- [ロケール - ArchWiki](https://wiki.archlinux.jp/index.php/ロケール)
- [インストールガイド - ArchWiki](https://wiki.archlinux.jp/index.php/インストールガイド)
- [一般的な推奨事項 - ArchWiki](https://wiki.archlinux.jp/index.php/一般的な推奨事項)
- [systemd環境におけるハードウェアクロック調整 - Qiita](https://qiita.com/slug/items/4f902f45c5796f69309c)

## まとめ
今回実行したコマンドをまとめると、次のようになります。

- `timedatectl`
- `timedatectl list-timezones`
- `timedatectl set-timezone Asia/Tokyo`
- `timedatectl set-ntp true`