パソコンの時計が間違っていると、いろいろな問題が起きてしまいます。
ファイルの更新日時が正しく記録されなかったり、セキュリティ証明書のエラーが出たりすることがあります。
でも、「Ubuntuで時計を合わせるにはどうすればいいの?」と困っている方も多いのではないでしょうか。
この記事では、Ubuntuで日付・時刻を変更する方法を紹介します。
時刻設定の基本知識

まず、Ubuntuでの時刻管理の仕組みを理解しましょう。
システム時刻とハードウェア時刻
Ubuntuには2つの時計があります:
システム時刻(System Clock)
- Ubuntuが内部で管理している時刻
- アプリケーションが参照する時刻
- メモリ上で動作し、電源を切ると消える
ハードウェア時刻(Hardware Clock/RTC)
- マザーボード上の時計チップが管理
- 電源を切っても動き続ける
- BIOS/UEFIの時刻と同じ
通常、Ubuntuはシステム起動時にハードウェア時刻を読み取って、システム時刻を設定します。
UTC vs ローカル時刻
UTC(協定世界時)
- 世界標準の時刻
- タイムゾーンの影響を受けない
- サーバーで推奨される設定
ローカル時刻
- 地域の時刻(日本では JST)
- 人間が理解しやすい
- デスクトップで使われることが多い
NTP(ネットワーク時刻同期)
NTPとは? Network Time Protocol の略で、インターネット経由で正確な時刻を取得する仕組みです。
メリット
- 常に正確な時刻を保てる
- 手動での調整が不要
- 複数のコンピューター間で時刻が統一される
現在の日付・時刻を確認する

時刻を変更する前に、現在の設定を確認しましょう。
基本的な確認コマンド
dateコマンド
date
実行結果の例
2025年 6月 24日 月曜日 14:35:10 JST
別の表示形式で確認
# 英語表記で表示
LANG=C date
# ISO 8601形式で表示
date -I
# 詳細なタイムスタンプ
date "+%Y-%m-%d %H:%M:%S %Z"
timedatectlコマンドで詳細確認
timedatectl status
実行結果の例
Local time: 月 2025-06-24 14:35:10 JST
Universal time: 月 2025-06-24 05:35:10 UTC
RTC time: 月 2025-06-24 05:35:10
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
各項目の意味
- Local time:現地時刻
- Universal time:UTC時刻
- RTC time:ハードウェア時刻
- Time zone:設定されているタイムゾーン
- NTP service:自動時刻同期の状態
ハードウェア時刻の確認
# ハードウェア時刻を表示
sudo hwclock --show
# ハードウェア時刻とシステム時刻の比較
sudo hwclock --compare
タイムゾーンの確認
# 現在のタイムゾーン
timedatectl show-timezones | grep Asia/Tokyo
# 利用可能なタイムゾーン一覧
timedatectl list-timezones | grep Asia
画面操作(GUI)で日付・時刻を設定する

Ubuntu初心者の方には、マウス操作での設定がおすすめです。
GNOME デスクトップでの設定
Step 1: 設定画面を開く
- 画面右上の設定アイコンをクリック
- 「設定」を選択
- 左側のメニューから「日付と時刻」を選択
Step 2: 自動時刻設定をオフにする
- 「自動日時」のスイッチを確認
- オンになっている場合は、クリックしてオフにする
- 管理者パスワードの入力を求められる場合があります
Step 3: 日付を手動設定
- 「日付」の項目をクリック
- カレンダーが表示されるので、正しい日付を選択
- 「選択」または「適用」をクリック
Step 4: 時刻を手動設定
- 「時刻」の項目をクリック
- 時間と分を入力
- 必要に応じて秒も設定
- 「適用」をクリック
タイムゾーンの変更(GUI)
手順
- 設定画面の「日付と時刻」を開く
- 「タイムゾーン」をクリック
- 世界地図から地域を選択、または検索ボックスを使用
- 日本の場合は「Asia/Tokyo」を選択
12時間表示と24時間表示の切り替え
設定方法
- 設定画面で「地域と言語」を選択
- 「形式」タブを開く
- 「時刻」の形式を選択
- 24時間表示:14:35
- 12時間表示:2:35 PM
コマンドラインで日付・時刻を設定する
サーバー環境やリモート操作では、コマンドでの設定が便利です。
dateコマンドによる設定
基本的な設定方法
# 年月日と時分秒を同時に設定
sudo date -s "2025-06-24 15:30:00"
# 月日時分の形式で設定
sudo date -s "062415302025" # MMDDhhmmYYYY
# 日付のみ設定
sudo date -s "2025-06-24"
# 時刻のみ設定
sudo date -s "15:30:00"
相対的な時刻設定
# 現在時刻から5分進める
sudo date -s "+5 minutes"
# 現在時刻から1時間戻す
sudo date -s "-1 hour"
# 現在時刻から1日進める
sudo date -s "+1 day"
timedatectlコマンドによる設定
timedatectlは、systemdの時刻管理ツールで、より高機能です。
日付の設定
# 日付を設定
sudo timedatectl set-time "2025-06-24"
# 時刻を設定
sudo timedatectl set-time "15:30:00"
# 日付と時刻を同時に設定
sudo timedatectl set-time "2025-06-24 15:30:00"
その他の設定
# タイムゾーンを設定
sudo timedatectl set-timezone Asia/Tokyo
# NTPの有効化/無効化
sudo timedatectl set-ntp true # 有効化
sudo timedatectl set-ntp false # 無効化
# ハードウェア時刻をローカル時刻に設定(通常は推奨しない)
sudo timedatectl set-local-rtc true
ハードウェア時刻の設定
システム時刻をハードウェア時刻に同期
# システム時刻をハードウェア時刻にコピー
sudo hwclock --systohc
# UTCでハードウェア時刻を設定
sudo hwclock --systohc --utc
# ローカル時刻でハードウェア時刻を設定
sudo hwclock --systohc --localtime
ハードウェア時刻をシステム時刻に同期
# ハードウェア時刻をシステム時刻にコピー
sudo hwclock --hctosys
ハードウェア時刻を直接設定
# ハードウェア時刻を直接設定
sudo hwclock --set --date="2025-06-24 15:30:00"
自動時刻同期(NTP)の設定

正確な時刻を保つために、NTPを使った自動同期を設定しましょう。
NTPの状態確認
# NTPサービスの状態確認
timedatectl status
# systemd-timesyncdの状態確認
systemctl status systemd-timesyncd
# 詳細な同期状況
timedatectl show-timesync --all
NTPの有効化・無効化
# NTPを有効化
sudo timedatectl set-ntp true
# NTPを無効化
sudo timedatectl set-ntp false
# サービスの手動開始
sudo systemctl start systemd-timesyncd
# サービスの手動停止
sudo systemctl stop systemd-timesyncd
NTPサーバーの設定
systemd-timesyncdの設定
# 設定ファイルを編集
sudo nano /etc/systemd/timesyncd.conf
設定例
[Time]
NTP=ntp.nict.jp time.google.com
FallbackNTP=pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
日本でよく使われるNTPサーバー
- ntp.nict.jp(情報通信研究機構)
- time.google.com(Google)
- pool.ntp.org(NTP Pool Project)
設定の反映
# 設定を再読み込み
sudo systemctl restart systemd-timesyncd
# 手動で同期実行
sudo systemctl restart systemd-timesyncd.service
chronydを使った高精度時刻同期
より高精度な時刻同期が必要な場合は、chronydを使用できます。
chronydのインストール
# systemd-timesyncdを停止
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd
# chronydをインストール
sudo apt update
sudo apt install chrony
# chronydを開始
sudo systemctl start chronyd
sudo systemctl enable chronyd
chronydの設定
# 設定ファイルを編集
sudo nano /etc/chrony/chrony.conf
設定例
# NTPサーバーの指定
server ntp.nict.jp iburst
server time1.google.com iburst
server time2.google.com iburst
# 他の設定
driftfile /var/lib/chrony/chrony.drift
makestep 1.0 3
rtcsync
chronydの状態確認
# 同期状況の確認
sudo chronyc tracking
# NTPサーバーの状態確認
sudo chronyc sources
# 詳細な統計情報
sudo chronyc sourcestats
タイムゾーンの管理
正しいタイムゾーンの設定は、時刻表示や各種アプリケーションの動作に重要です。
タイムゾーンの確認と変更
現在のタイムゾーン確認
# 現在のタイムゾーン
timedatectl | grep "Time zone"
# タイムゾーンファイルの確認
ls -la /etc/localtime
# 環境変数での確認
echo $TZ
利用可能なタイムゾーン一覧
# 全世界のタイムゾーン
timedatectl list-timezones
# アジア地域のタイムゾーン
timedatectl list-timezones | grep Asia
# 日本関連のタイムゾーン
timedatectl list-timezones | grep -i japan
タイムゾーンの変更
# 日本標準時に設定
sudo timedatectl set-timezone Asia/Tokyo
# 手動でシンボリックリンクを作成(推奨しない)
sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
一時的なタイムゾーン変更
# 現在のセッションのみ変更
export TZ=America/New_York
date
# コマンド実行時のみ変更
TZ=Europe/London date
複数タイムゾーンの時刻表示
# 異なるタイムゾーンでの時刻表示
TZ=Asia/Tokyo date
TZ=America/New_York date
TZ=Europe/London date
# 世界時計を表示するスクリプト例
#!/bin/bash
echo "東京: $(TZ=Asia/Tokyo date)"
echo "ニューヨーク: $(TZ=America/New_York date)"
echo "ロンドン: $(TZ=Europe/London date)"
echo "UTC: $(TZ=UTC date)"
時刻設定のスクリプト化

定期的な時刻調整や、複数の環境での一括設定をスクリプト化できます。
自動時刻調整スクリプト
基本的な調整スクリプト
#!/bin/bash
# time_sync.sh - 時刻同期スクリプト
echo "現在の時刻: $(date)"
# NTPサービスの状態確認
if systemctl is-active --quiet systemd-timesyncd; then
echo "NTP同期サービスは動作中です"
# 手動で同期を実行
sudo systemctl restart systemd-timesyncd
sleep 2
echo "同期後の時刻: $(date)"
else
echo "NTP同期サービスが動作していません"
echo "手動で時刻を確認してください"
fi
ログ付きの時刻調整
#!/bin/bash
# time_sync_with_log.sh
LOG_FILE="/var/log/time_sync.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# ログ関数
log_message() {
echo "[$TIMESTAMP] $1" | sudo tee -a $LOG_FILE
}
# 同期前の時刻をログに記録
log_message "同期開始 - 現在時刻: $(date)"
# NTP同期実行
if sudo timedatectl set-ntp true; then
log_message "NTP同期を有効化しました"
else
log_message "エラー: NTP同期の有効化に失敗"
exit 1
fi
# 結果確認
sleep 5
NEW_TIME=$(date)
log_message "同期完了 - 新しい時刻: $NEW_TIME"
# 同期状況の確認
SYNC_STATUS=$(timedatectl status | grep "synchronized")
log_message "同期状況: $SYNC_STATUS"
設定バックアップと復元
現在の時刻設定をバックアップ
#!/bin/bash
# backup_time_settings.sh
BACKUP_DIR="/backup/time_settings"
DATE_STAMP=$(date +%Y%m%d_%H%M%S)
# バックアップディレクトリ作成
sudo mkdir -p $BACKUP_DIR
# 設定ファイルをバックアップ
sudo cp /etc/systemd/timesyncd.conf $BACKUP_DIR/timesyncd.conf.$DATE_STAMP
sudo cp /etc/localtime $BACKUP_DIR/localtime.$DATE_STAMP
# 現在の設定を記録
timedatectl status > $BACKUP_DIR/timedatectl_status.$DATE_STAMP
date > $BACKUP_DIR/current_date.$DATE_STAMP
echo "時刻設定をバックアップしました: $BACKUP_DIR"
よくある問題と解決方法

時刻設定でよく遭遇する問題と、その解決方法を説明します。
問題1: 手動で時刻を設定できない
症状
date -s
コマンドでエラーが出る- GUIで時刻変更ができない
原因と解決方法
原因1: NTPが有効になっている
# NTPの状態確認
timedatectl status | grep "NTP service"
# NTPを無効化
sudo timedatectl set-ntp false
# 手動で時刻設定
sudo timedatectl set-time "2025-06-24 15:30:00"
原因2: 権限不足
# sudoを使って実行
sudo date -s "2025-06-24 15:30:00"
# ユーザーがsudoグループに属しているか確認
groups $USER
原因3: systemd-timesyncdが動作中
# サービスの状態確認
systemctl status systemd-timesyncd
# 一時的に停止
sudo systemctl stop systemd-timesyncd
# 時刻設定後に再開
sudo systemctl start systemd-timesyncd
問題2: 時刻がずれ続ける
症状
- 定期的に時刻がずれる
- 再起動すると時刻が戻ってしまう
原因と解決方法
原因1: ハードウェア時刻が正しくない
# システム時刻をハードウェア時刻に同期
sudo hwclock --systohc
# ハードウェア時刻の確認
sudo hwclock --show
原因2: NTPサーバーに接続できない
# NTPサーバーへの接続確認
sudo chronyc sources
# 代替NTPサーバーを設定
sudo nano /etc/systemd/timesyncd.conf
原因3: 時計回路の問題
# CMOS電池の確認(ハードウェア的な問題)
# この場合は物理的な交換が必要
# 一時的な対処として頻繁な同期設定
# cronで定期的に時刻同期を実行
echo "*/5 * * * * root /usr/bin/timedatectl set-ntp true" | sudo tee -a /etc/crontab
問題3: タイムゾーンが正しく表示されない
症状
- 時刻は正しいが、タイムゾーンが違う
- 日本時間で設定したのにUTCで表示される
解決方法
# 現在のタイムゾーン確認
timedatectl status
# 正しいタイムゾーンに設定
sudo timedatectl set-timezone Asia/Tokyo
# 環境変数の確認
echo $TZ
# 必要に応じて環境変数を設定
export TZ=Asia/Tokyo
echo 'export TZ=Asia/Tokyo' >> ~/.bashrc
問題4: デュアルブート時の時刻問題
症状
- WindowsとUbuntuを切り替えると時刻がずれる
原因
- Windowsはハードウェア時刻をローカル時刻として扱う
- Ubuntuはハードウェア時刻をUTCとして扱う
解決方法
方法1: Ubuntuをローカル時刻に合わせる
# Ubuntuでハードウェア時刻をローカル時刻として扱う
sudo timedatectl set-local-rtc 1
方法2: Windowsをに合わせる(推奨)
Windowsのレジストリを編集して、UTCを使用するよう設定:
# Windowsで以下のレジストリキーを作成
# HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation
# 名前: RealTimeIsUniversal
# 種類: DWORD
# 値: 1
時刻の監視とログ
システムの時刻を継続的に監視し、問題を早期発見する方法を説明します。
時刻同期のログ確認
# systemd-timesyncdのログ確認
journalctl -u systemd-timesyncd
# 最新のログのみ表示
journalctl -u systemd-timesyncd -n 20
# リアルタイムでログを監視
journalctl -u systemd-timesyncd -f
時刻ずれの監視スクリプト
#!/bin/bash
# time_monitor.sh - 時刻監視スクリプト
LOG_FILE="/var/log/time_monitor.log"
THRESHOLD=5 # 許容する時刻ずれ(秒)
# NTPサーバーから正確な時刻を取得
ACCURATE_TIME=$(ntpdate -q pool.ntp.org 2>/dev/null | tail -1 | awk '{print $6}')
SYSTEM_TIME=$(date +%s)
# 時刻ずれを計算
TIME_DIFF=$((SYSTEM_TIME - ACCURATE_TIME))
ABS_DIFF=${TIME_DIFF#-} # 絶対値
# ログ記録
echo "$(date): System time: $SYSTEM_TIME, Accurate time: $ACCURATE_TIME, Difference: $TIME_DIFF seconds" >> $LOG_FILE
# 閾値を超えた場合の処理
if [ $ABS_DIFF -gt $THRESHOLD ]; then
echo "$(date): WARNING: Time difference exceeds threshold ($THRESHOLD seconds)" >> $LOG_FILE
# アラート送信やNTP同期実行
sudo timedatectl set-ntp true
fi
パフォーマンスへの影響確認
# 時刻同期のパフォーマンス確認
systemd-analyze blame | grep timesyncd
# システム全体の時刻関連サービス確認
systemctl list-units --type=service | grep -i time
まとめ
この記事を通じて、Ubuntuでの日付・時刻設定について詳しく学ぶことができたと思います。
重要なポイントの振り返り
基本的な確認方法
- 現在の日時確認:
date
コマンド - 詳細な状態確認:
timedatectl status
- ハードウェア時刻確認:
sudo hwclock --show
手動設定の方法
- GUI操作:設定→日付と時刻で手動設定
- コマンド操作:
sudo timedatectl set-time
- 注意点:NTPを無効化してから手動設定
自動時刻同期
- NTP有効化:
sudo timedatectl set-ntp true
- 設定ファイル:
/etc/systemd/timesyncd.conf
- 高精度同期:chronydの使用
タイムゾーン管理
- 確認:
timedatectl list-timezones
- 変更:
sudo timedatectl set-timezone Asia/Tokyo
- 日本時間設定が基本
よくある問題の対処
- 手動設定できない:NTPを無効化
- 時刻がずれる:ハードウェア時刻の同期
- デュアルブート問題:UTC/ローカル時刻の統一
コメント