Ubuntuを使っていて、「時計の時間が合っていない」「ログの時刻がおかしい」という経験はありませんか?
これは、タイムゾーンの設定が間違っていることが原因かもしれません。
タイムゾーンは、世界各地の時刻差を表す設定です。
日本にいるのにアメリカの時刻で表示されたり、ヨーロッパの時刻になっていたりすると、いろいろな問題が起きてしまいます。
タイムゾーンが間違っていると起きる問題
- ファイルの作成日時が正しく表示されない
- ログファイルの時刻がずれて、トラブル調査が困難
- プログラムのスケジュール実行(cron)が期待通りに動かない
- データベースの日時が不正確になる
この記事では、初心者の方でも迷わずに設定できるよう、画面操作とコマンド操作の両方を詳しく説明します。
タイムゾーンの基本知識

まず、タイムゾーンがどのような仕組みになっているかを理解しましょう。
世界時刻の基準
UTC(協定世界時)
- 世界共通の基準時刻
- イギリスのグリニッジ標準時とほぼ同じ
- サーバーやデータベースでよく使われる
JST(日本標準時)
- 日本の標準時刻
- UTCより9時間進んでいる(UTC+9)
- 私たちが普段使っている時刻
その他の主要タイムゾーン
- EST(東部標準時):アメリカ東海岸(UTC-5)
- PST(太平洋標準時):アメリカ西海岸(UTC-8)
- CET(中央ヨーロッパ時間):ドイツ、フランスなど(UTC+1)
Ubuntuでのタイムゾーン表記
Ubuntuでは、地域名/都市名の形式でタイムゾーンを表します:
日本の場合
- Asia/Tokyo(推奨)
- Japan(古い表記)
アメリカの場合
- America/New_York(ニューヨーク)
- America/Los_Angeles(ロサンゼルス)
- America/Chicago(シカゴ)
ヨーロッパの場合
- Europe/London(ロンドン)
- Europe/Paris(パリ)
- Europe/Berlin(ベルリン)
システム時刻とローカル時刻
システム時刻
- コンピューター内部で管理される時刻
- 通常はUTCで保存される
- ハードウェア時計(RTC)とは別
ローカル時刻
- ユーザーが見る時刻
- タイムゾーン設定によってシステム時刻から計算
- 画面に表示される時刻
現在のタイムゾーンを確認する方法

設定を変更する前に、現在どのタイムゾーンに設定されているかを確認しましょう。
timedatectlコマンドで詳細確認
最も便利で詳細な情報が得られるコマンドです。
timedatectl status
実行結果の例
Local time: 火 2025-06-25 15:30:45 JST
Universal time: 火 2025-06-25 06:30:45 UTC
RTC time: 火 2025-06-25 06:30:45
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
各項目の意味
- Local time:現在のローカル時刻(日本時間)
- Universal time:UTC時刻
- Time zone:設定されているタイムゾーン
- System clock synchronized:時刻同期の状態
- NTP service:自動時刻同期サービスの状態
その他の確認方法
タイムゾーン名のみ確認
cat /etc/timezone
実行結果の例
Asia/Tokyo
現在の日時を表示
date
実行結果の例
2025年 6月 25日 火曜日 15:30:45 JST
システムのローカル設定確認
locale | grep LC_TIME
実行結果の例
LC_TIME="ja_JP.UTF-8"
詳細な時刻情報の確認
タイムゾーンファイルの確認
ls -la /etc/localtime
実行結果の例
lrwxrwxrwx 1 root root 27 6月 25 10:00 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
これは、現在のタイムゾーンファイルがAsia/Tokyoにリンクされていることを示しています。
利用可能なタイムゾーンの数を確認
timedatectl list-timezones | wc -l
世界中には400以上のタイムゾーンが定義されています。
コマンドでタイムゾーンを変更する方法

コマンドラインを使った変更方法は、サーバー管理やスクリプト化に便利です。
基本的な変更手順
Step 1: 利用可能なタイムゾーン一覧の確認
timedatectl list-timezones
出力の一部例
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
...
Asia/Tokyo
Asia/Ulaanbaatar
...
Europe/London
Europe/Madrid
...
特定の地域のみ表示
# アジア地域のタイムゾーン
timedatectl list-timezones | grep Asia
# アメリカ地域のタイムゾーン
timedatectl list-timezones | grep America
# ヨーロッパ地域のタイムゾーン
timedatectl list-timezones | grep Europe
Step 2: タイムゾーンの設定
sudo timedatectl set-timezone Asia/Tokyo
他の地域の例
# ニューヨーク(アメリカ東海岸)
sudo timedatectl set-timezone America/New_York
# ロサンゼルス(アメリカ西海岸)
sudo timedatectl set-timezone America/Los_Angeles
# ロンドン(イギリス)
sudo timedatectl set-timezone Europe/London
# パリ(フランス)
sudo timedatectl set-timezone Europe/Paris
Step 3: 設定の確認
timedatectl status
正しく設定されていれば、Time zoneの欄が変更されているはずです。
よく使われるタイムゾーン設定例
日本で使用する場合
# 日本標準時に設定
sudo timedatectl set-timezone Asia/Tokyo
# 確認
date
海外展開している企業のサーバー設定
# 東京本社サーバー
sudo timedatectl set-timezone Asia/Tokyo
# ニューヨーク支社サーバー
sudo timedatectl set-timezone America/New_York
# ロンドン支社サーバー
sudo timedatectl set-timezone Europe/London
一時的なタイムゾーン変更
システム全体の設定を変えずに、特定のコマンドだけ別のタイムゾーンで実行することもできます。
環境変数を使った一時的な変更
# 現在の時刻(日本時間)
date
# ニューヨーク時間で表示
TZ=America/New_York date
# ロンドン時間で表示
TZ=Europe/London date
# UTC時間で表示
TZ=UTC date
特定のプログラムを別のタイムゾーンで実行
# アプリケーションをニューヨーク時間で実行
TZ=America/New_York ./my_application
# ログをUTC時間で記録
TZ=UTC logger "System maintenance completed"
GUI(デスクトップ)でタイムゾーンを変更する方法

デスクトップ環境を使っている場合は、マウス操作で簡単に変更できます。
GNOME デスクトップでの変更手順
Step 1: 設定画面を開く
- 画面右上の設定アイコンをクリック
- 「設定」を選択
- 左側のメニューから「日付と時刻」を選択
Step 2: タイムゾーンの変更
- 「自動タイムゾーン」がオンの場合は、オフに切り替え
- 「タイムゾーン」の項目をクリック
- 表示される世界地図で地域をクリック、または検索ボックスを使用
Step 3: 設定の適用
- 正しいタイムゾーンを選択
- 「選択」または「適用」をクリック
- 時刻表示が変更されることを確認
地図での選択方法
視覚的な選択
- 世界地図上で自分の地域をクリック
- 近くの主要都市が自動的に選択される
- 複数の候補がある場合は一覧から選択
検索ボックスでの選択
- 都市名や国名を入力
- 候補が絞り込まれて表示される
- 目的のタイムゾーンを選択
時刻表示形式の変更
タイムゾーンと一緒に、時刻の表示形式も変更できます。
12時間表示と24時間表示の切り替え
- 「地域と言語」設定を開く
- 「形式」タブを選択
- 「時刻」の項目で表示形式を選択
- 24時間表示:14:30
- 12時間表示:2:30 PM
週の開始曜日の設定
- 同じく「形式」タブで設定
- 「週の開始日」を選択
- 月曜日(国際標準)
- 日曜日(アメリカ式)
タイムゾーン設定のスクリプト化

複数のサーバーや自動化が必要な場合は、スクリプトを作成しましょう。
基本的な設定スクリプト
タイムゾーン設定スクリプトの例
#!/bin/bash
# timezone_setup.sh - タイムゾーン設定スクリプト
# 設定したいタイムゾーン
TARGET_TIMEZONE="Asia/Tokyo"
echo "現在のタイムゾーン設定:"
timedatectl status | grep "Time zone"
echo "タイムゾーンを ${TARGET_TIMEZONE} に変更します..."
# タイムゾーンの変更
sudo timedatectl set-timezone $TARGET_TIMEZONE
# 変更結果の確認
if [ $? -eq 0 ]; then
echo "タイムゾーンの変更が完了しました:"
timedatectl status | grep "Time zone"
echo "現在の時刻: $(date)"
else
echo "エラー: タイムゾーンの変更に失敗しました"
exit 1
fi
地域別設定スクリプト
対話的なタイムゾーン選択
#!/bin/bash
# interactive_timezone.sh - 対話的タイムゾーン設定
echo "地域を選択してください:"
echo "1) 日本 (Asia/Tokyo)"
echo "2) アメリカ東海岸 (America/New_York)"
echo "3) アメリカ西海岸 (America/Los_Angeles)"
echo "4) イギリス (Europe/London)"
echo "5) フランス (Europe/Paris)"
echo "6) その他(手動入力)"
read -p "選択 (1-6): " choice
case $choice in
1)
TIMEZONE="Asia/Tokyo"
;;
2)
TIMEZONE="America/New_York"
;;
3)
TIMEZONE="America/Los_Angeles"
;;
4)
TIMEZONE="Europe/London"
;;
5)
TIMEZONE="Europe/Paris"
;;
6)
read -p "タイムゾーンを入力してください: " TIMEZONE
;;
*)
echo "無効な選択です"
exit 1
;;
esac
# タイムゾーンの妥当性確認
if timedatectl list-timezones | grep -q "^$TIMEZONE$"; then
sudo timedatectl set-timezone $TIMEZONE
echo "タイムゾーンを $TIMEZONE に設定しました"
date
else
echo "エラー: 無効なタイムゾーンです: $TIMEZONE"
exit 1
fi
リモートサーバー一括設定
複数サーバーへの一括設定
#!/bin/bash
# remote_timezone_setup.sh - リモートサーバータイムゾーン設定
# サーバーリスト
SERVERS=(
"user@server1.example.com"
"user@server2.example.com"
"user@server3.example.com"
)
TARGET_TIMEZONE="Asia/Tokyo"
for server in "${SERVERS[@]}"; do
echo "Setting timezone on $server..."
ssh $server "sudo timedatectl set-timezone $TARGET_TIMEZONE"
if [ $? -eq 0 ]; then
echo "✓ $server: 設定完了"
ssh $server "date"
else
echo "✗ $server: 設定失敗"
fi
echo "---"
done
よくある問題と解決方法

タイムゾーン設定でよく遭遇する問題と、その解決方法を説明します。
問題1: 権限エラーが発生する
症状
Failed to set time zone: Access denied
原因と解決方法
原因1: sudo権限がない
# ユーザーがsudoグループに属しているか確認
groups $USER
# sudoグループに追加(管理者が実行)
sudo usermod -aG sudo username
原因2: systemd-timedatedサービスが動作していない
# サービスの状態確認
sudo systemctl status systemd-timedated
# サービスの起動
sudo systemctl start systemd-timedated
sudo systemctl enable systemd-timedated
問題2: 変更が反映されない
症状
- コマンドは成功するが、時刻表示が変わらない
- アプリケーションの時刻が古いまま
解決方法
ユーザーセッションの再起動
# 現在のセッションからログアウト
logout
# または環境変数を更新
export TZ=$(cat /etc/timezone)
アプリケーションの再起動
# 特定のサービスを再起動
sudo systemctl restart cron
sudo systemctl restart rsyslog
# デスクトップ環境の再起動
sudo systemctl restart gdm3
問題3: NTPとの競合
症状
- タイムゾーンは正しいが、時刻がずれている
- 定期的に時刻が変更される
解決方法
NTP同期の確認と調整
# NTP同期の状態確認
timedatectl status | grep "NTP service"
# 手動で時刻同期
sudo systemctl restart systemd-timesyncd
# NTPサーバーの設定確認
cat /etc/systemd/timesyncd.conf
問題4: デュアルブート環境での問題
症状
- WindowsとUbuntuを切り替えると時刻がずれる
解決方法
Ubuntu側でローカル時刻を使用
# ハードウェア時計をローカル時刻として扱う
sudo timedatectl set-local-rtc 1
# 確認
timedatectl status | grep "RTC in local TZ"
または、Windows側でUTCを使用(推奨)
WindowsのレジストリでUTCを有効にする方法もあります(上級者向け)。
問題5: ログファイルの時刻が混乱
症状
- 過去のログと新しいログの時刻が合わない
- アプリケーションログの時刻がずれている
解決方法
システムログの再起動
# rsyslogの再起動
sudo systemctl restart rsyslog
# journaldの再起動
sudo systemctl restart systemd-journald
アプリケーション固有の設定
# Apacheのタイムゾーン設定
echo "SetEnv TZ Asia/Tokyo" | sudo tee -a /etc/apache2/apache2.conf
# PHPのタイムゾーン設定
echo "date.timezone = Asia/Tokyo" | sudo tee -a /etc/php/8.1/apache2/php.ini
海外サーバーでの実践例

海外のVPSやクラウドサーバーを使用する際の実践的な設定例を紹介します。
AWS EC2インスタンスの設定
Ubuntu 22.04 LTSの場合
# インスタンス起動後の初期設定
# デフォルトはUTCに設定されている
# 現在の設定確認
timedatectl status
# 日本時間に変更
sudo timedatectl set-timezone Asia/Tokyo
# 変更の確認
date
cron設定の確認
# cronのタイムゾーン設定
echo "CRON_TZ=Asia/Tokyo" | sudo tee -a /etc/crontab
# cronサービスの再起動
sudo systemctl restart cron
Google Cloud Platformの設定
Compute Engineインスタンス
# メタデータからタイムゾーンを取得
curl -H "Metadata-Flavor: Google" \
http://metadata.google.internal/computeMetadata/v1/instance/attributes/timezone
# 手動設定
sudo timedatectl set-timezone Asia/Tokyo
Docker コンテナでの設定
Dockerfileでの設定
FROM ubuntu:22.04
# タイムゾーンの設定
ENV TZ=Asia/Tokyo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# その他の設定...
実行時の設定
# コンテナ実行時にタイムゾーンを指定
docker run -e TZ=Asia/Tokyo ubuntu:22.04 date
# ボリュームマウントでの設定
docker run -v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
ubuntu:22.04 date
自動化とモニタリング

タイムゾーン設定の自動化と監視方法を説明します。
設定の自動バックアップ
現在の設定をバックアップ
#!/bin/bash
# timezone_backup.sh
BACKUP_DIR="/backup/timezone"
DATE_STAMP=$(date +%Y%m%d_%H%M%S)
# バックアップディレクトリ作成
sudo mkdir -p $BACKUP_DIR
# 現在の設定をバックアップ
timedatectl status > $BACKUP_DIR/timedatectl_$DATE_STAMP.txt
cp /etc/timezone $BACKUP_DIR/timezone_$DATE_STAMP.txt
cp /etc/localtime $BACKUP_DIR/localtime_$DATE_STAMP
echo "タイムゾーン設定をバックアップしました: $BACKUP_DIR"
設定の監視
タイムゾーン変更の監視
#!/bin/bash
# timezone_monitor.sh
EXPECTED_TZ="Asia/Tokyo"
CURRENT_TZ=$(timedatectl status | grep "Time zone" | awk '{print $3}')
if [ "$CURRENT_TZ" != "$EXPECTED_TZ" ]; then
echo "警告: タイムゾーンが期待値と異なります"
echo "期待値: $EXPECTED_TZ"
echo "現在値: $CURRENT_TZ"
# アラート送信やログ記録
logger "Timezone mismatch detected: expected $EXPECTED_TZ, got $CURRENT_TZ"
fi
ansible を使った大規模展開
Playbookの例
# timezone.yml
---
- name: Set timezone on Ubuntu servers
hosts: ubuntu_servers
become: yes
tasks:
- name: Set timezone to Asia/Tokyo
timezone:
name: Asia/Tokyo
- name: Restart systemd-timesyncd
service:
name: systemd-timesyncd
state: restarted
- name: Verify timezone setting
command: timedatectl status
register: timezone_status
- name: Display timezone status
debug:
var: timezone_status.stdout_lines
実行方法
ansible-playbook -i inventory timezone.yml
まとめ
この記事を通じて、Ubuntuでのタイムゾーン設定について詳しく学ぶことができたと思います。
基本的な操作方法
- 確認:
timedatectl status
- 変更:
sudo timedatectl set-timezone Asia/Tokyo
- GUI操作:設定→日付と時刻→タイムゾーン
よく使われるタイムゾーン
- 日本:Asia/Tokyo
- アメリカ東海岸:America/New_York
- アメリカ西海岸:America/Los_Angeles
- イギリス:Europe/London
トラブル対処
- 権限エラー:sudo権限の確認
- 反映されない:セッション再起動
- NTPとの競合:時刻同期サービスの確認
実践的な活用
- サーバー管理での重要性
- ログ管理での正確性
- 海外展開での統一性
コメント