0Pricing
Python Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. date、time、datetime
  2. timedeltaと算術演算
  3. 書式設定と解析
  4. zoneinfoによるタイムゾーン
← Python Academyに戻る