1. はじめに Pythonで日付や時刻を扱う際に欠かせないのが datetime モジュールです。このモジュールを使うことで、現在の時刻の取得、日時のフォーマット変換、時間の計算など、さまざまな操作が可能になります。 しかし、Python初心者にとって datetime の扱いは少し難しく感じることがあります。例えば:「現在の日付や時刻を取得したいけど、どの関数を使えばいい?」 「タイムゾーンを考慮した時刻の処理が分からない!」 「日付を計算するにはどうすればいいの?」 本記事では、Pythonの datetime モジュールの基本から応用まで、わかりやすく解説していきます。初心者の方でもスムーズに理解できるよう、コード例を交えて説明していきますので、ぜひ参考にしてください。
2. datetimeモジュールとは?基本概念を理解しよう 2.1 datetimeモジュールの概要 Pythonには標準ライブラリとして datetime モジュールが用意されており、これを使うことで日付や時刻の操作が簡単にできます。datetime モジュールには、以下のような主要なクラスが含まれています。クラス名 概要 datetime日付と時刻を扱うクラス date日付のみを扱うクラス time時刻のみを扱うクラス timedelta時間の差を表すクラス tzinfoタイムゾーン情報を扱うためのクラス
このうち、最もよく使われるのが datetime クラスです。2.2 datetimeモジュールのインポート方法 Pythonの datetime モジュールを使うには、まずインポートする必要があります。以下のように import datetime を使うことで、モジュール全体をインポートできます。import datetime
# 現在の日時を取得
now = datetime.datetime.now()
print(now) また、特定のクラスのみをインポートすることも可能です。from datetime import datetime
# 現在の日時を取得
now = datetime.now()
print(now)from datetime import datetime の形でインポートすると、コード内で datetime.datetime.now() のように datetime を二重に書かずに済むため、よりシンプルになります。3. Pythonで現在時刻・今日の日付を取得する方法(nowとtodayの違い) 3.1 現在の日時を取得する方法 Pythonでは、現在の日時を取得するには datetime.now() を使います。from datetime import datetime
now = datetime.now()
print("現在の日時:", now) このコードを実行すると、次のような出力が得られます。現在の日時: 2025-02-01 12:34:56.789012 この形式は YYYY-MM-DD HH:MM:SS.ssssss という形になっており、日付・時刻・マイクロ秒を含んでいます。3.2 今日の日付を取得する方法 今日の日付のみを取得したい場合は、date.today() を使用します。from datetime import date
today = date.today()
print("今日の日付:", today) 出力例:今日の日付: 2025-02-013.3 now() と today() の違い メソッド 機能 datetime.now()現在の「日付と時刻」を取得 date.today()現在の「日付のみ」を取得
用途に応じて使い分けるとよいでしょう。
4. 日付と時刻のフォーマット変換(文字列⇔datetime) 日付や時刻を扱う際、フォーマットの変換は非常に重要です。Pythonでは strftime() と strptime() を使って、日時と文字列を相互変換できます。4.1 datetimeオブジェクトを文字列に変換する(strftime) 日時を特定のフォーマットの文字列に変換したい場合は、strftime() を使います。from datetime import datetime
now = datetime.now()
formatted_date = now.strftime("%Y-%m-%d %H:%M:%S")
print("フォーマット済み日付:", formatted_date) 出力:フォーマット済み日付: 2025-02-01 12:34:564.2 文字列をdatetimeオブジェクトに変換する(strptime) 文字列から datetime に変換するには strptime() を使います。from datetime import datetime
date_str = "2025-02-01 12:34:56"
dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print("変換後のdatetimeオブジェクト:", dt) 出力:変換後のdatetimeオブジェクト: 2025-02-01 12:34:565. Pythonで日付を足し算・引き算する方法(timedeltaの使い方) Pythonでは timedelta クラスを使用することで、日付や時刻の加算・減算が簡単にできます。5.1 timedelta クラスの基本 from datetime import datetime, timedelta
# 現在の日付・時刻を取得
now = datetime.now()
# 7日後の日付を取得
future_date = now + timedelta(days=7)
print("7日後の日付:", future_date)
# 3日前の日付を取得
past_date = now - timedelta(days=3)
print("3日前の日付:", past_date)5.2 時間単位での加算・減算 from datetime import datetime, timedelta
now = datetime.now()
# 1時間後の時刻
one_hour_later = now + timedelta(hours=1)
print("1時間後の時刻:", one_hour_later)
# 30分前の時刻
thirty_minutes_ago = now - timedelta(minutes=30)
print("30分前の時刻:", thirty_minutes_ago)5.3 2つの日付の差分を求める from datetime import datetime
# 2つの日付を定義
date1 = datetime(2025, 2, 10)
date2 = datetime(2025, 2, 1)
# 差分を計算
difference = date1 - date2
print("日付の差:", difference)
print("日数差:", difference.days, "日")
6. タイムゾーンを考慮した日時の扱い方(pytzとzoneinfoの違い) Pythonで日付や時刻を扱う際、タイムゾーンを考慮することは非常に重要です。6.1 pytz を使ったタイムゾーン設定 from datetime import datetime
import pytz
# タイムゾーンの指定
japan_tz = pytz.timezone('Asia/Tokyo')
# 現在のUTC時刻を取得
utc_now = datetime.utcnow()
# JST(日本標準時)に変換
jst_now = utc_now.replace(tzinfo=pytz.utc).astimezone(japan_tz)
print("日本時間(JST):", jst_now)6.2 zoneinfo(Python 3.9以降)を使ったタイムゾーン設定 from datetime import datetime
from zoneinfo import ZoneInfo
# JST(日本標準時)の現在時刻を取得
jst_now = datetime.now(ZoneInfo("Asia/Tokyo"))
print("JSTの現在時刻:", jst_now) Python 3.9以降を使用している場合は、zoneinfo を利用するのがおすすめです。
7. エラーとその対処法 Pythonの datetime モジュールを使用する際、特に初心者が遭遇しやすいエラーがいくつかあります。7.1 AttributeError: type object 'datetime.datetime' has no attribute 'timedelta' from datetime import datetime
# timedelta を使おうとするがエラー
now = datetime.now()
new_date = now + datetime.timedelta(days=7)解決策 :from datetime import datetime, timedelta
now = datetime.now()
new_date = now + timedelta(days=7)
print(new_date)7.2 TypeError: can't subtract offset-naive and offset-aware datetimes from datetime import datetime
import pytz
dt_naive = datetime(2025, 2, 1, 12, 0)
dt_aware = datetime(2025, 2, 1, 12, 0, tzinfo=pytz.utc)
diff = dt_aware - dt_naive # エラー発生解決策 :dt_aware = dt_naive.replace(tzinfo=pytz.utc)
8. 実践例 8.1 日付範囲を生成する方法 from datetime import datetime, timedelta
start_date = datetime(2025, 2, 1)
end_date = datetime(2025, 2, 7)
date_list = [start_date + timedelta(days=i) for i in range((end_date - start_date).days + 1)]
for date in date_list:
print(date.strftime("%Y-%m-%d"))8.2 営業日(平日)を考慮した日付計算 import pandas as pd
business_days = pd.bdate_range(start="2025-02-01", end="2025-02-10")
for day in business_days:
print(day.date())8.3 UNIXタイムスタンプの変換 from datetime import datetime
timestamp = 1735689600
dt = datetime.fromtimestamp(timestamp)
print("変換後のdatetime:", dt)
9. FAQ(よくある質問) 9.1 datetimeとtimeの違いは? 項目 datetimetime目的 日付・時刻の処理 UNIX時間の計測やスリープ処理 例 datetime(2025, 2, 1, 12, 0, 0)time.sleep(2)
9.2 strftime と strptime の違いは? from datetime import datetime
# datetime → 文字列(strftime)
now = datetime(2025, 2, 1, 12, 0, 0)
formatted_str = now.strftime("%Y-%m-%d %H:%M:%S")
print("文字列に変換:", formatted_str)
# 文字列 → datetime(strptime)
date_str = "2025-02-01 12:00:00"
parsed_date = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print("datetimeに変換:", parsed_date)9.3 UNIXタイムスタンプを datetime に変換するには? from datetime import datetime
timestamp = 1735689600
dt = datetime.fromtimestamp(timestamp)
print("変換後のdatetime:", dt)
10. まとめ 10.1 記事のポイントまとめ datetime モジュールは、Pythonで日付や時刻を扱うための標準ライブラリ。datetime.now() で現在の日時を取得、date.today() で現在の日付のみを取得。strftime() で datetime → 文字列へ変換、strptime() で 文字列 → datetime へ変換。timedelta(days=7) で1週間後の日付を計算。Python 3.9以降は zoneinfo、それ以前は pytz を使用。 datetime オブジェクト同士を > < == で比較可能。10.2 公式ドキュメントと参考資料 10.3 Pythonでの時間処理の実践をすすめよう ✅ スケジュール管理アプリの開発 ✅ ログデータの解析 ✅ 異なるタイムゾーンでの時刻計算 ✅ 自動リマインダー機能の実装 最後までお読みいただき、ありがとうございました!