Day 41:日時処理で「時間を味方につける」スキルを身につける
Day 41では、業務自動化で頻出の 日時処理 を扱います。 「締め切りまであと何日?」「この期間の売上を集計したい」「ログの日時を見やすく整形したい」など、 日付・時刻を正しく扱えるかどうかで、できることの幅が大きく変わります。
キーワードは次の5つです。
datetimetimedelta- 日付計算
- 期間計算
- フォーマット
ここでは、初心者向けにかみ砕いて、 「現在日時の取得 → 日付計算 → 期間計算 → 表示フォーマット」までを ステップバイステップで説明していきます。
datetimeの基本:現在日時を扱ってみる
現在日時を取得する
# day41_datetime_basic.py
from datetime import datetime
def show_now():
"""現在日時を取得して表示する例です。"""
# 現在の日時を取得します。
now = datetime.now()
print("=== 現在日時 ===")
print(now) # そのまま表示すると「2026-08-31 16:45:00.123456」のような形式になります。
# 年・月・日・時・分・秒を個別に取り出すこともできます。
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)
print("時:", now.hour)
print("分:", now.minute)
print("秒:", now.second)
if __name__ == "__main__":
show_now()
Pythonポイント:
datetime.now()で「今この瞬間」の日時オブジェクトを取得できます。year,month,dayなどの属性で、各要素を取り出せます。
特定の日付・時刻を作る:datetimeオブジェクトの生成
例:2024年1月1日 9時00分の日時を作る
from datetime import datetime
def create_specific_datetime():
"""特定の日付・時刻のdatetimeオブジェクトを作る例です。"""
dt = datetime(2024, 1, 1, 9, 0, 0) # 年, 月, 日, 時, 分, 秒
print("=== 特定日時 ===")
print(dt)
print("年:", dt.year, "月:", dt.month, "日:", dt.day)
print("時:", dt.hour, "分:", dt.minute, "秒:", dt.second)
if __name__ == "__main__":
create_specific_datetime()
Pythonポイント:
datetime(年, 月, 日, 時, 分, 秒)で任意の日時を作れます。- 「締め切り日時」「イベント開始日時」などをコードで表現するときに使います。
timedeltaの基本:日付・時間の差を表す
timedeltaとは何か
timedelta は、「時間の差」や「期間」を表すオブジェクトです。
- 「3日後」
- 「2時間前」
- 「30分後」
といった「時間のずれ」を表現するのに使います。
例:3日後の日時を計算する
from datetime import datetime, timedelta
def three_days_later():
"""現在から3日後の日時を計算する例です。"""
now = datetime.now()
delta = timedelta(days=3) # 3日分の差を表すオブジェクトです。
future = now + delta # 現在日時に3日分を足します。
print("=== 現在日時 ===")
print(now)
print("=== 3日後の日時 ===")
print(future)
if __name__ == "__main__":
three_days_later()
Pythonポイント:
timedelta(days=3)で「3日」という期間を表現。now + deltaで「3日後」、now - deltaで「3日前」を計算できます。
日付計算:締め切りや有効期限を計算する
例:締め切り日を計算する(今日から7日後)
from datetime import datetime, timedelta
def calculate_deadline(days=7):
"""今日から指定日数後の締め切り日を計算する例です。"""
today = datetime.now().date() # 日付部分だけを取得します。
delta = timedelta(days=days)
deadline = today + delta
print("=== 今日の日付 ===")
print(today)
print(f"=== 締め切り日({days}日後) ===")
print(deadline)
if __name__ == "__main__":
calculate_deadline(7)
Pythonここでのポイント:
datetime.now().date()で「日付だけ」のdateオブジェクトを取得。dateに対してもtimedeltaを足し引きできます。- 「今日から何日後が締め切りか」を簡単に計算できます。
期間計算:2つの日付の差を求める
例:開始日と終了日の間が何日かを計算する
from datetime import date
def calculate_period():
"""開始日と終了日の期間(日数)を計算する例です。"""
start = date(2024, 1, 1)
end = date(2024, 1, 15)
# 日付同士の引き算で timedelta が得られます。
delta = end - start
print("=== 開始日 ===")
print(start)
print("=== 終了日 ===")
print(end)
print("=== 期間(日数) ===")
print(delta.days, "日")
if __name__ == "__main__":
calculate_period()
Pythonポイント:
end - startでtimedeltaが得られる。delta.daysで「何日分の差か」を取得できる。- 「キャンペーン期間」「プロジェクト期間」などを計算するときに便利です。
フォーマット:日時を文字列として整形する
strftimeで「表示用の文字列」に変換する
strftime は、日時を 指定した形式の文字列 に変換するためのメソッドです。
よく使うフォーマット指定子:
%Y:西暦(4桁)%m:月(2桁)%d:日(2桁)%H:時(24時間表記)%M:分%S:秒
例:日本語っぽい形式に整形する
from datetime import datetime
def format_datetime():
"""日時を日本語っぽい形式の文字列に整形する例です。"""
now = datetime.now()
# 「YYYY-MM-DD HH:MM:SS」形式
s1 = now.strftime("%Y-%m-%d %H:%M:%S")
# 「YYYY年MM月DD日 HH時MM分」形式
s2 = now.strftime("%Y年%m月%d日 %H時%M分")
print("=== デフォルト表示 ===")
print(now)
print("=== フォーマット1 ===")
print(s1)
print("=== フォーマット2 ===")
print(s2)
if __name__ == "__main__":
format_datetime()
Pythonポイント:
strftime("フォーマット文字列")で日時を好きな形の文字列にできる。- ログ出力やレポートの見出しなど、「人間が読むための日時表示」に必須です。
文字列から日時に変換する:strptime
例:「2024-01-01 09:00:00」という文字列をdatetimeにする
from datetime import datetime
def parse_datetime():
"""文字列からdatetimeオブジェクトを作る例です。"""
s = "2024-01-01 09:00:00"
# 文字列の形式に合わせてフォーマットを指定します。
dt = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
print("=== 元の文字列 ===")
print(s)
print("=== 変換後のdatetime ===")
print(dt)
print("年:", dt.year, "月:", dt.month, "日:", dt.day)
if __name__ == "__main__":
parse_datetime()
Pythonポイント:
datetime.strptime(文字列, フォーマット)で文字列を日時オブジェクトに変換できる。- CSVやログファイルなど、「文字列として保存されている日時」を扱うときに必須です。
日時処理ミニツール:締め切りチェック&期間表示
最後に、Day 41の要素を組み合わせた簡単な「締め切りチェックツール」のテンプレートを示します。
# day41_deadline_tool.py
from datetime import datetime, date, timedelta
def parse_date(date_str):
"""YYYY-MM-DD形式の文字列をdateオブジェクトに変換する関数です。"""
return datetime.strptime(date_str, "%Y-%m-%d").date()
def calculate_deadline(start_date_str, days):
"""開始日と日数から締め切り日を計算する関数です。"""
start_date = parse_date(start_date_str)
delta = timedelta(days=days)
deadline = start_date + delta
return start_date, deadline
def days_until(deadline):
"""締め切り日まであと何日かを計算する関数です。"""
today = date.today()
delta = deadline - today
return delta.days
def main():
# 例:2024-01-01から7日後が締め切り
start_str = "2024-01-01"
days = 7
start_date, deadline = calculate_deadline(start_str, days)
print("=== 締め切り計算ツール ===")
print("開始日:", start_date)
print("締め切り日:", deadline)
remaining = days_until(deadline)
print("今日の日付:", date.today())
print("締め切りまであと:", remaining, "日")
if __name__ == "__main__":
main()
Pythonこのツールでは、
- 文字列の開始日(
"2024-01-01")をdateに変換し - 指定日数後の締め切り日を計算し
- 今日から締め切りまで何日あるかを表示しています。
Day 41のまとめ
Day 41では、日時処理として、
datetime.now()で現在日時を取得し、年・月・日・時・分・秒を扱う方法datetime(年, 月, 日, 時, 分, 秒)で特定の日時を表現する方法timedeltaを使って「3日後」「7日前」などの日時計算を行う方法date同士の引き算で期間(日数)を計算する方法strftime()で日時を人間が読みやすい文字列に整形する方法strptime()で文字列から日時オブジェクトを作る方法
をステップバイステップで体験していただきました。
ここまで来ると、 「締め切り管理」「期間計算」「ログの日時整形」など、時間に関わる処理をPythonで自在に扱う」 という感覚がかなり育っているはずです。
この日時処理の基礎は、 業務自動化だけでなく、ログ解析・スケジューラ・レポート生成など、 さまざまな場面で土台となる重要なスキルです。
