Pythonで異なるタイムゾーンの時間を扱う方法!初心者でもわかるpytzとzoneinfoの使い方
生徒
「先生、同じPythonでも、海外の時間と日本の時間ってどうやって扱えばいいんですか?」
先生
「とても大切なポイントですね。Pythonでは、pytzやzoneinfoという機能を使えば、簡単にタイムゾーンを扱えるんですよ。」
生徒
「へえ〜、でも“タイムゾーン”ってそもそも何ですか?」
先生
「じゃあまずは、タイムゾーンの意味から丁寧に説明していきましょう!」
1. タイムゾーンとは何か?初心者にもわかりやすく解説
タイムゾーン(time zone)とは、地球上の特定の地域で共通して使われる「標準時刻」の区分のことです。地球は自転しているため、太陽が昇るタイミングは場所によって異なります。もし世界中で同じ時計を使っていたら、ある国ではお昼の12時なのに外は真っ暗…という混乱が起きてしまいます。これを防ぐために、国や地域ごとに「ここからここまではこの時間を使おう」とルールを決めているのがタイムゾーンです。
- UTC(協定世界時): 世界の時間の基準点。ロンドン付近を通る経線(本初子午線)が基準となっています。
- 時差: UTCからどれだけ時間がズレているかを表します。
例えば、日本のタイムゾーンは「Asia/Tokyo(アジア・トウキョウ)」と呼ばれます。日本は世界の基準であるUTCよりも9時間早く進んでいるため、表記上は「UTC+9」となります。ニューヨークであれば、冬時間の間は「UTC-5」となり、日本とは14時間の時差(日本の方が14時間進んでいる)が生じます。
プログラミングでこのタイムゾーンを意識しないと、「予約システムで予約したはずの時間が、海外のサーバー上では昨日の日付になっていた!」といったミスが起こります。未経験の方でも、まずは「場所によって時計の針が指す位置が違うんだな」というイメージを持っておけば大丈夫です。
Pythonでこの「時間のズレ」を確認する簡単なコードを見てみましょう。ここでは特別な設定をせず、単純に「今の環境の時計」を表示する例です。
from datetime import datetime
# あなたのパソコンやサーバーの設定に基づいた「現在の時刻」を表示します
now = datetime.now()
print("現在の時刻:", now)
# 出力例: 2026-01-30 14:00:00.123456
# ※これだけでは「どこの国の時間か」という情報が含まれていないのがわかります
このように、単純な取得だけでは「どこの国の時間か」という情報(タイムゾーン情報)が欠落しています。これを補う方法を、次の章から詳しく学んでいきましょう。
2. Pythonでタイムゾーンを扱うには?
Pythonでは、日時(にちじ)を扱うときにdatetimeモジュールを使います。でも、このままだとタイムゾーンの情報がついていません。そこで使うのが以下の2つです。
- pytz:古くから使われているライブラリ。多くの解説サイトで紹介されています。
- zoneinfo:Python3.9以降に標準搭載された新しい方法。追加インストール不要。
3. pytzを使ったタイムゾーンの設定
pytzを使うと、世界中のタイムゾーンに変換できます。インストールが必要ですが、広く使われています。
まずはインストールしましょう。
pip install pytz
次に、日本とニューヨークの現在時刻を表示するコード例です。
from datetime import datetime
import pytz
# タイムゾーンの設定
tokyo = pytz.timezone("Asia/Tokyo")
ny = pytz.timezone("America/New_York")
# 現在時刻を取得して、タイムゾーンを付ける
now_tokyo = datetime.now(tokyo)
now_ny = now_tokyo.astimezone(ny)
print("日本時間:", now_tokyo)
print("ニューヨーク時間:", now_ny)
日本時間: 2025-09-03 21:00:00+09:00
ニューヨーク時間: 2025-09-03 08:00:00-04:00
このようにtimezone()で地域を指定し、datetime.now()に渡すことで、その地域の現在時刻がわかります。
4. zoneinfoを使ったタイムゾーンの設定(Python3.9以降)
zoneinfoは、Python3.9以降で標準で使えるタイムゾーン管理機能です。追加のインストールは不要で、シンプルに使えます。
from datetime import datetime
from zoneinfo import ZoneInfo
# 現在時刻(タイムゾーン付き)
now_tokyo = datetime.now(ZoneInfo("Asia/Tokyo"))
now_ny = now_tokyo.astimezone(ZoneInfo("America/New_York"))
print("日本時間:", now_tokyo)
print("ニューヨーク時間:", now_ny)
日本時間: 2025-09-03 21:00:00+09:00
ニューヨーク時間: 2025-09-03 08:00:00-04:00
ZoneInfoを使うと、pytzと同じようにタイムゾーン変換ができますが、より現代的でシンプルな書き方ができます。
5. UTCとは?世界の基準時間を知ろう
UTC(協定世界時)とは、世界中で共通に使われる「基準の時間」です。インターネットの世界や国際的なデータ管理では、UTCで時間を統一することがよくあります。
たとえば、Pythonで現在のUTC時刻を取得するには次のように書きます。
from datetime import datetime, timezone
now_utc = datetime.now(timezone.utc)
print("UTC時間:", now_utc)
UTC時間: 2025-09-03 12:00:00+00:00
UTCはタイムゾーンの基準としてとても重要なので、覚えておきましょう。
6. タイムゾーン変換のよくある使い方と注意点
実際に開発の現場では、以下のような場面でタイムゾーンの操作が必要になります。
- 国際的なユーザーがいるWebサービス
- サーバーがUTCで動いていて、日本時間に変換したいとき
- 異なる地域のスケジュールを比較するとき
注意点として、タイムゾーンのないdatetime.now()は、パソコンの設定によって結果が変わるので注意しましょう。常にtimezoneやZoneInfoをつける習慣をつけると安全です。
7. タイムゾーン一覧を確認する方法
使えるタイムゾーンの名前を調べたいときは、次のコードで一覧を出すことができます。
import pytz
for tz in pytz.all_timezones:
print(tz)
たとえば、「Asia/Tokyo」や「Europe/London」など、たくさんの地域名が表示されます。zoneinfoでもほぼ同じ名前が使えます。