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-01
3.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:56
4.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:56
5. 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
の違いは? 項目 datetime
time
目的 日付・時刻の処理 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での時間処理の実践をすすめよう ✅ スケジュール管理アプリの開発 ✅ ログデータの解析 ✅ 異なるタイムゾーンでの時刻計算 ✅ 自動リマインダー機能の実装 最後までお読みいただき、ありがとうございました!