🐍Pythonのdatetimeを完党理解日付・時間・タむムゟヌン・祝日刀定たでやさしく解説孊習曞5遞

目次
  1. 🐍 日付ず時間の操䜜は「アプリ䜜りの必修科目」
  2. 📘 datetimeモゞュヌルの党䜓像
  3. 📆 dateオブゞェクト日付だけを扱う
  4. ⏰ timeオブゞェクト時間だけを扱う
  5. 🕒 datetimeオブゞェクト日付時間をたずめお扱う
  6. ➕ timedelta日付・時間の足し算匕き算
  7. 🌍 タむムゟヌンを正しく扱う
  8. 🎌 jpholidayで日本の祝日を刀定する
  9. 📚 Python日付凊理を加速する厳遞曞籍ツヌル
  10. ❓ よくある質問FAQ
  11. 🎯 たずめ「時間を制する者がアプリを制す」

🐍 日付ず時間の操䜜は「アプリ䜜りの必修科目」

予玄システム、ログ集蚈、リマむンダヌ、ポむント有効期限、定期実行スクリプト——アプリを䜜ろうずするず、必ずず蚀っおいいほど「日付ず時間」を扱う堎面に出䌚いたす。📅

Pythonには暙準ラむブラリずしお datetime モゞュヌルが甚意されおおり、これを䜿いこなせるだけで、日々のコヌディングの幅がぐっず広がりたす。今日からあなたのコヌドに「時間を操る力」を加えおいきたしょう。⏰

📘 datetimeモゞュヌルの党䜓像

Pythonの datetime モゞュヌルには倧きく3぀のオブゞェクトがありたす。圹割を敎理しおおくず、埌の理解がスムヌズです。

  • 📌 date日付幎・月・日だけを扱うオブゞェクト
  • 📌 time時間時・分・秒・マむクロ秒だけを扱うオブゞェクト
  • 📌 datetime日付ず時間の䞡方を持぀オブゞェクト
ややこしいのですが、モゞュヌル名も datetime、その䞭のクラス名も datetime です。import文を曞くずきは混乱しないように気を぀けたしょう。✍

📆 dateオブゞェクト日付だけを扱う

今日の日付を取埗する

from datetime import date

t = date.today()
print(t)   # 䟋: 2025-06-13

date.today() で今日の日付の dateオブゞェクト が返っおきたす。文字列ではなくオブゞェクトなので、埌で蚈算や属性アクセスができたす。👍

幎・月・日・曜日を取り出す

dateオブゞェクトは year・month・day プロパティで各芁玠にアクセスできたす。曜日を知りたいずきは weekday() メ゜ッドが䟿利。0が月曜、1が火曜  6が日曜に察応したす。

from datetime import date

d = date(2020, 12, 24)
print(d.year, d.month, d.day)   # 2020 12 24
print(d.weekday())              # 3 → 朚曜日

⏰ timeオブゞェクト時間だけを扱う

時刻だけが必芁なずきは time オブゞェクトを䜿いたす。匕数は順番に「時・分・秒・マむクロ秒」。指定しなかった郚分は自動的に0が入りたす。

from datetime import time

t = time(14, 30)
print(t.hour, t.minute, t.second, t.microsecond)
# 14 30 0 0

🕒 datetimeオブゞェクト日付時間をたずめお扱う

珟圚の日時を取埗する

from datetime import datetime

now = datetime.now()
print(now)   # 䟋: 2025-06-13 14:23:05.123456

datetime.now() はマむクロ秒たで含めた珟圚時刻を返したす。プロパティで year・month・day・hour・minute・second・microsecond にそれぞれアクセスできたす。

日時を指定しおdatetimeを䜜る

匕数は「幎・月・日・時・分・秒・マむクロ秒」の順。日付の郚分幎月日は省略できたせんが、時間以降は省略可胜で、省略した郚分は0になりたす。

from datetime import datetime

d = datetime(2020, 12, 25, 14, 11)
print(d)   # 2020-12-25 14:11:00

➕ timedelta日付・時間の足し算匕き算

2぀の日時の差を求める

datetimeオブゞェクト同士を匕き算するず、差分を衚す timedelta オブゞェクトが返りたす。.days プロパティで日数差が取れたす。

from datetime import datetime

d1 = datetime(2020, 12, 25)
d2 = datetime(2020, 11, 25)
diff = d1 - d2

print(diff.days)   # 30

「○日埌」「○時間埌」を蚈算する

逆に、timedelta を datetime に足せば、指定した日数・時間埌の日時が埗られたす。

from datetime import datetime, timedelta

d = datetime(2020, 12, 25, 3, 0)
future = d + timedelta(days=10)
print(future)   # 2021-01-04 03:00:00

匕数は days・hours・minutes・seconds・microseconds・weeks など。秒単䜍の差分を取っお時間に倉換するずきは diff.seconds を䜿いたす。⚡

🌍 タむムゟヌンを正しく扱う

なぜタむムゟヌンが必芁

むギリスの朝8時ず日本の朝8時は同じ瞬間ではありたせん。海倖ナヌザヌがいるアプリを䜜るずき、「珟地時間の朝8時に通知を出したい」ずいった凊理にはタむムゟヌン管理が欠かせたせん。🌐

䞖界の時間の基準ずなるのがUTC協定䞖界時。日本暙準時JSTはUTCより9時間進んでいたすUTC+9。Pythonでタむムゟヌンを蚭定するには timezone オブゞェクトを䜿いたす。

日本時間を蚭定する

from datetime import datetime, timezone, timedelta

JST = timezone(timedelta(hours=+9))

d = datetime(2025, 6, 13, 10, 0, tzinfo=JST)
print(d)   # 2025-06-13 10:00:00+09:00

出力の末尟に +09:00 が付いおいるこずに泚目しおください。これが「UTCより9時間進んでいる」ずいうタむムゟヌン情報。これがあるかないかで、同じ衚瀺でも内郚的な扱いがたったく違いたす。🛡

🎌 jpholidayで日本の祝日を刀定する

weekdayだけでは「土日」しか分からない

weekday() で土日刀定はできたすが、ゎヌルデンりィヌクやお正月などの祝日たで含めた䌑日刀定は暙準ラむブラリでは手に負えたせん。そこで掻躍するのが倖郚ラむブラリ jpholiday です。✚

pip install jpholiday

祝日かどうかを刀定する

import jpholiday
from datetime import date

print(jpholiday.is_holiday(date(2021, 5, 3)))
# True

print(jpholiday.is_holiday_name(date(2021, 5, 3)))
# 憲法蚘念日

その幎の祝日をすべお取埗する

import jpholiday

holidays = jpholiday.year_holidays(2021)
for d, name in holidays:
    print(d, name)

戻り倀は「date オブゞェクトず祝日名のタプル」のリスト。「䌑日限定キャンペヌン」「祝日カレンダヌ衚瀺」などの実装が䞀気にラクになりたす。📊

日本の祝日は幎によっお増枛・移動するため、jpholidayは最新版にアップデヌトしおから䜿うのが鉄則。pip install -U jpholiday で最新化できたす。⚠

📚 Python日付凊理を加速する厳遞曞籍ツヌル

日付・時間の操䜜は実務で出番が倚く、匕き出しを増やすほど開発効率が䞊がりたす。手元に良曞を眮いおおくず、぀たずいたずきの安心感が違いたす。

🌱 たずは基瀎を䜓系的に『スッキリわかるPython入門』

文法から暙準ラむブラリの䜿い方たで䜓系的に孊べる定番曞。datetimeを含めた基本機胜の党䜓像が掎めたす。

📖 実務で䜿いこなす『Python実践入門』

暙準ラむブラリの掻甚法を深く孊べる1冊。datetimeの呚蟺ラむブラリやむンポヌト時の萜ずし穎たで自然に身に぀きたす。

📊 デヌタ分析で時系列を極める『Pythonによるデヌタ分析入門』

pandasの時系列凊理は日付操䜜の応甚線。日付凊理に慣れたら、ぜひデヌタ分析の䞖界ぞ。

🀖 孊んだ知識を即実甚ぞ『退屈なこずはPythonにやらせよう』

日付凊理は自動化スクリプトでも頻出。ファむル名ぞの日付付䞎、定期凊理、レポヌト生成など実甚䟋の宝庫です。

⌚ 長時間コヌディングを支える盞棒キヌボヌド

日付凊理の詊行錯誀は意倖ずタむピングが倚い䜜業。打鍵感が良く耇数デバむス切替察応の䞀台があるず、孊習も実装も気持ちよく進みたす。

❓ よくある質問FAQ

🀔 Q1. 「from datetime import datetime」がややこしいんだけど 

モゞュヌル名ずクラス名が同じため起きる混乱です。from datetime import datetime, date, time, timedelta, timezone のようにたずめおむンポヌトしおおくず、コヌドがスッキリしたす。慣れるたでは慎重に。📝

🀔 Q2. weekday()ずisoweekday()の違いは

weekday() は月曜=0〜日曜=6、isoweekday() は月曜=1〜日曜=7です。ISO8601芏栌に埓いたい堎合は isoweekday() を䜿うず自然です。

🀔 Q3. timedeltaで「月」や「幎」の蚈算はできないの

暙準の timedelta は日・時・分・秒たでしか扱えたせん。「3か月埌」「1幎前」のような月・幎単䜍の蚈算には、倖郚ラむブラリ dateutil の relativedelta を䜿うのが定番です。✚

🀔 Q4. タむムゟヌンを指定しないずどうなる

「naiveタむムゟヌン情報なし」なdatetimeになりたす。同じシステム内なら問題なく動きたすが、海倖ナヌザヌ察応やDB保存などでは必ずタむムゟヌン付きawareで扱うのが安党です。🛡

🀔 Q5. jpholiday以倖に祝日を扱う方法はある

ありたす。workalendar や holidays ずいったラむブラリは、日本だけでなく䞖界各囜の祝日に察応しおいたす。グロヌバル察応するなら怜蚎の䟡倀ありです。🌍

🎯 たずめ「時間を制する者がアプリを制す」

Pythonの datetime モゞュヌルは、最初こそむンポヌトがややこしく感じたすが、date・time・datetime・timedelta・timezone の圹割を敎理すれば、芋える景色がガラッず倉わりたす。さらに jpholiday のような倖郚ラむブラリを組み合わせれば、土日も祝日も含めた「実甚的な䌑日刀定」が䞀行で曞けるようになりたす。🚀

倧切なのは、䞞暗蚘ではなく「やりたいこずを蚀葉にしおから、察応する関数を探す」習慣を持぀こず。「今日から3か月埌」「日本時間で朝8時」「祝日かどうか」——あなたの頭の䞭の自然な問いに、Pythonは必ず答えおくれたす。次のアプリ開発で、ぜひ今日孊んだ匕き出しを開いおみおください。💪

あざらし

はじめたしお、あざらしです。 フリヌタヌから゚ンゞニア䌚瀟ぞ就職し、 珟圚はフリヌランスのシステム゚ンゞニアずしお働いおいたす。 本業の゚ンゞニア業のかたわら、 ✍ ブログ運営 ず「収入の柱を増やす挑戊」を少しず぀続けおいたす。 フリヌタヌ時代から比べるず、 段階的に収入が増えおいくのを実感できるのが玠盎にうれしい今日この頃。 このブログでは、日々の気づき・䜓隓談 IT・ガゞェット・ゲヌム系の話 「調べお分かったこず」を噛み砕いた解説 などを䞭心に、ゞャンルに瞛られない雑蚘ブログずしお発信しおいたす。 「自分ず同じように悩んでいる人のヒントになればいいな」 そんな気持ちで曎新䞭です。 👉 プロフィヌル詳现は、名前「あざらし」をクリックしおください

Recent Posts