Pythonで異なるタイムゾーンの時間を扱う方法!初心者でもわかるpytzとzoneinfoの使い方
生徒
「先生、同じPythonでも、海外の時間と日本の時間ってどうやって扱えばいいんですか?」
先生
「とても大切なポイントですね。Pythonでは、pytzやzoneinfoという機能を使えば、簡単にタイムゾーンを扱えるんですよ。」
生徒
「へえ〜、でも“タイムゾーン”ってそもそも何ですか?」
先生
「じゃあまずは、タイムゾーンの意味から丁寧に説明していきましょう!」
1. タイムゾーンとは何か?
「タイムゾーン(time zone)」とは、地域ごとに決められている標準時刻のことです。地球は丸いので、世界中で同じ時間が流れているわけではなく、日本とアメリカでは朝と夜が逆になります。このズレを調整するために、国や地域ごとに「タイムゾーン」という考え方があるのです。
たとえば、日本は「Asia/Tokyo(アジア・トウキョウ)」というタイムゾーンで、協定世界時(UTC)よりも9時間進んでいます(UTC+9)。
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でもほぼ同じ名前が使えます。