本記事では、Pythonのdateutilで日時処理をする方法を解説します。python-dateutil は、標準ライブラリのdatetimeを拡張し、柔軟な日付操作を可能にするPythonのライブラリです。特に、タイムゾーン処理、相対的な日付計算などが便利に扱えます。
インストール
dateutilは標準ライブラリには含まれていないため、pip でインストールする必要があります。
pip install python-dateutil
主な機能と使い方
様々な形式の日付解析 (parser.parse)
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
相対的な日付計算 (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
タイムゾーンの扱い (tz)
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
他のライブラリとの違い
datetimeと他の似た機能を持つライブラリの比較を以下のテーブルにまとめました。
機能 | 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に比べるとやや重く、追加の依存関係が増える。
まとめ
- dateutilは標準の datetime を強化するライブラリで、文字列解析、相対日付計算、タイムゾーン管理が簡単にできる。
- parser.parse()を使うとフォーマットを指定せずに日付文字列を解析可能。
- relativedeltaで timedeltaではできない 年や月単位の加減算 が可能。
- tz.gettz()でpytzよりも簡単にタイムゾーンを扱える。
- dateutilはdatetimeより強力で、pytzより扱いやすいが、pendulumの方が高機能な場面もある。
標準のdatetimeだけでは不便な場合は、まずdateutilを試してみるのがオススメです。