zoneinfoによるタイムゾーン
awareなdatetimeを扱います
「zoneinfoによるタイムゾーン」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
naive datetimeとaware datetime
naive datetimeにはタイムゾーン情報がありません。どの地域の午後2時なのか分からず、単に「午後2時」とだけ示します。aware datetimeはタイムゾーンを持つため、世界中での正確な瞬間を特定できます。
aware datetimeを使うと、ユーザーが複数の地域にまたがる場合のバグを防げます。
from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)zoneinfoをインポートする
Python 3.9以降では、標準ライブラリにzoneinfoが含まれています。ZoneInfoをインポートし、'Europe/Istanbul'や'America/New_York'のようなIANAタイムゾーン名を渡します。
from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)aware datetimeを作成する
datetimeを作成するときにtzinfo=ZoneInfo(...)を渡すと、awareにできます。これで、どの地域に属する時刻なのかを正確に認識できます。
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)基準としてのUTC
UTCは世界共通の基準です。datetime.now(ZoneInfo('UTC'))を使うと、現在のawareなUTC時刻を取得できます。時刻をUTCで保存するのはベストプラクティスです。
from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)タイムゾーン間で変換する
.astimezone(tz)はaware datetimeを別のタイムゾーンに変換し、同じ瞬間を指し続けるように時刻を調整します。
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)同じ瞬間、異なる時計
変換後は時計に表示される数値が異なりますが、基になる瞬間は同一です。2つのaware datetimeを比較すると、表示された数字ではなく、実際の時刻同士が比較されます。
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)UTCオフセットを読み取る
.utcoffset()メソッドは、その瞬間におけるタイムゾーンとUTCの差を示すtimedeltaを返します。夏時間による調整も含まれます。
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())夏時間も自動的に処理される
zoneinfoはシステムのタイムゾーンデータベースを使用するため、夏時間の開始と終了を認識できます。同じタイムゾーンでも、年間を通じてオフセットが異なる場合があります。
from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())naiveな時刻にタイムゾーンを付ける
naive datetimeが既知の現地時刻を表している場合は、.replace(tzinfo=...)でタイムゾーンを付けます。これにより、時計の時刻をずらさずにタイムゾーン情報を設定できます。
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)naiveとawareを混在させない
naive datetimeとaware datetimeを引いたり比較したりすることはできません。PythonはTypeErrorを発生させます。プログラム全体でdatetimeの種類を統一してください。
from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
print(aware - naive)
except TypeError as e:
print('Error:', e)タイムゾーン付きでフォーマットする
aware datetimeをフォーマットすると、%Zコードはタイムゾーン名を、%zコードは数値のオフセットを出力します。
from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))クイックチェック
naive datetimeとaware datetimeの主な違いは何ですか?
復習:zoneinfoによるタイムゾーン
まとめ:
- naive datetimeにはタイムゾーン情報がなく、aware datetimeは
tzinfoを持ちます。 zoneinfoモジュールのZoneInfo('Region/City')を使います。.astimezone()はaware datetimeを別のタイムゾーンに変換します。zoneinfoは夏時間を自動的に処理します。また、naive datetimeとaware datetimeを決して混在させないでください。
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))よくある質問
「zoneinfoによるタイムゾーン」レッスンは無料ですか?
はい。「zoneinfoによるタイムゾーン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「zoneinfoによるタイムゾーン」で何を学びますか?
awareなdatetimeを扱います ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「zoneinfoによるタイムゾーン」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- date、time、datetime
- timedeltaと算術演算
- 書式設定と解析
- zoneinfoによるタイムゾーン