Pythonのdateutilで日時処理をする方法を解説

Python

python-dateutil は、標準ライブラリのdatetimeを拡張し、柔軟な日付操作を可能にするPythonのライブラリです。特に、タイムゾーン処理、相対的な日付計算などが便利に扱えます。


1. インストール

dateutilは標準ライブラリには含まれていないため、pip でインストールする必要があります。

pip install python-dateutil

2. 主な機能と使い方

2.1 様々な形式の日付解析 (parser.parse)

dateutil.parser.parse()を使うと、文字列を自動的にdatetimeオブジェクトへ変換できます。

from dateutil import parser

dt = parser.parse("2025-02-15 14:30:00")
print(dt)  # 2025-02-15 14:30:00

特徴

  • strptime()のようにフォーマットを指定しなくても、柔軟に日付文字列を解析できる。
  • “15th Feb 2025” などの英語表記にも対応。
  • “2025/02/15” や “15-02-2025” など様々なフォーマットも自動認識。
print(parser.parse("15th Feb 2025"))  # 2025-02-15 00:00:00
print(parser.parse("2025/02/15"))    # 2025-02-15 00:00:00

2.2 相対的な日付計算 (relativedelta)

relativedeltaを使うと、年や月単位での加減算が簡単にできます。

from dateutil.relativedelta import relativedelta
from datetime import datetime

now = datetime(2025, 2, 15)
next_month = now + relativedelta(months=1)
print(next_month)  # 2025-03-15 00:00:00

特徴

  • timedeltaでは対応しづらい年や月単位の加減算ができる。
  • 月末を考慮して調整も可能。
# 2月28日 → 1ヶ月後は 3月28日
print(datetime(2025, 2, 28) + relativedelta(months=1))  # 2025-03-28

# 1ヶ月後の「月末」を取得
print(datetime(2025, 1, 31) + relativedelta(months=1))  # 2025-02-28

2.3 タイムゾーンの扱い (tz)

dateutil.tzを使うと、簡単にタイムゾーンを設定できます。

from dateutil import tz
from datetime import datetime

# タイムゾーンの設定
jst = tz.gettz("Asia/Tokyo")
dt = datetime(2025, 2, 15, 14, 30, tzinfo=jst)
print(dt)  # 2025-02-15 14:30:00+09:00

特徴

  • 標準のpytzよりもシンプルにタイムゾーンを扱える。
  • tz.gettz(“地域名”)を使うだけで適用可能。
  • tz.UTCでUTC時間も簡単に設定可能。
utc_now = datetime.utcnow().replace(tzinfo=tz.UTC)
print(utc_now)  # 2025-02-15 05:30:00+00:00

3. 他のライブラリとの違い

機能datetime(標準)dateutilpytzpendulum
文字列解析strptime()(フォーマット指定必須)parser.parse()(フォーマット不要)parse()(フォーマット不要)
相対的な日付計算timedelta(秒・日単位のみ)relativedelta(年・月単位OK)add()(年・月OK)
タイムゾーンtzinfo を手動設定tz.gettz()(シンプル)pytz.timezone()in_timezone()
DST(夏時間対応)△(自動調整なし)○(DST自動調整)○(自動調整)

🔹 dateutilはpytzよりもシンプル

  • pytzではlocalize()normalize()を使わないとタイムゾーンを正しく適用できないが、dateutil.tzならtz.gettz()だけでOK。
  • pytzは厳密なタイムゾーン処理が必要な場合に適している。

🔹 dateutilはdatetimeを拡張

  • datetimeだけでは 年や月単位の加減算ができない が、relativedeltaを使えば可能。
  • datetime.strptime()で日付文字列を解析する際はフォーマット指定が必須だが、dateutil.parser.parse()なら不要。

🔹 pendulumはdateutilよりも高機能

  • pendulumdateutilの機能を内包しつつ、より直感的なメソッド(例: add(months=1)) で操作できる。
  • ただしpendulumdateutilに比べるとやや重く、追加の依存関係が増える。

4. まとめ

  • dateutil標準の datetime を強化するライブラリで、文字列解析、相対日付計算、タイムゾーン管理が簡単にできる。
  • parser.parse()を使うとフォーマットを指定せずに日付文字列を解析可能。
  • relativedeltatimedeltaではできない 年や月単位の加減算 が可能。
  • tz.gettz()でpytzよりも簡単にタイムゾーンを扱える。
  • dateutildatetimeより強力で、pytzより扱いやすいが、pendulumの方が高機能な場面もある。

標準のdatetimeだけでは不便な場合は、まずdateutilを試してみるのがオススメです。

タイトルとURLをコピーしました