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(標準) | dateutil | pytz | pendulum |
---|---|---|---|---|
文字列解析 | 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よりも高機能
- pendulumはdateutilの機能を内包しつつ、より直感的なメソッド(例: add(months=1)) で操作できる。
- ただしpendulumはdateutilに比べるとやや重く、追加の依存関係が増える。
4. まとめ
- dateutilは標準の datetime を強化するライブラリで、文字列解析、相対日付計算、タイムゾーン管理が簡単にできる。
- parser.parse()を使うとフォーマットを指定せずに日付文字列を解析可能。
- relativedeltaで timedeltaではできない 年や月単位の加減算 が可能。
- tz.gettz()でpytzよりも簡単にタイムゾーンを扱える。
- dateutilはdatetimeより強力で、pytzより扱いやすいが、pendulumの方が高機能な場面もある。
標準のdatetimeだけでは不便な場合は、まずdateutilを試してみるのがオススメです。