目次
1. はじめに
Pythonで日付や時刻を扱う際に欠かせないのがdatetime モジュールです。このモジュールを使うことで、現在の時刻の取得、日時のフォーマット変換、時間の計算など、さまざまな操作が可能になります。 しかし、Python初心者にとって datetime の扱いは少し難しく感じることがあります。例えば:- 「現在の日付や時刻を取得したいけど、どの関数を使えばいい?」
- 「タイムゾーンを考慮した時刻の処理が分からない!」
- 「日付を計算するにはどうすればいいの?」
datetime モジュールの基本から応用まで、わかりやすく解説していきます。初心者の方でもスムーズに理解できるよう、コード例を交えて説明していきますので、ぜひ参考にしてください。Ad
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() | 現在の「日付のみ」を取得 |
Ad
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, "日") 
Ad
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 を利用するのがおすすめです。Ad
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)Ad
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)Ad
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)Ad
10. まとめ
10.1 記事のポイントまとめ
datetimeモジュールは、Pythonで日付や時刻を扱うための標準ライブラリ。datetime.now()で現在の日時を取得、date.today()で現在の日付のみを取得。strftime()でdatetime→ 文字列へ変換、strptime()で 文字列 →datetimeへ変換。timedelta(days=7)で1週間後の日付を計算。- Python 3.9以降は
zoneinfo、それ以前はpytzを使用。 datetimeオブジェクト同士を><==で比較可能。


