高校物理160203 views
高校国語788336 views
高校化学2924392 views
雑学1473612 views
高校日本史190571 views
小学社会310485 views
英語613639 views
小学算数1200427 views
りんご209490 views
高校生物551766 views
Help
Tools
NewsSpreadsheetCalendarSlidesTier ListPen ToolIllustrationCrayonPixel ArtASCII ArtPerspectiveEndless StairsGraphMind MapER DiagramFamily TreeMemeCurved TextImage EditorMosaicRetro FilterPencil SketchOCR/HighlighterMakeup EditorFaviconVideo TrimmerScrolling VideoVideo TitleColor PickerColor ExtractorBonfireFireworksWater RippleWater SplashBreaking GlassWood GrainMarble TextureCSS ButtonIcon MakerBar ChartGrouped Bar ChartStacked Bar ChartPie ChartLine ChartArea ChartStacked Area ChartScatter Plot3D Bar Chart3D Pie ChartBar Chart RaceBubble ChartPopulation PyramidPictogramEarningsCandlestick ChartInvestment RiskMortgage SimulatorCalculatorMatrix CalculatorFunction GraphPolynomial ExpansionVenn DiagramField VisualizerRubik's Cube Group TheoryTraveling SalesmanVoronoi and DelaunayFractalColumn ArithmeticDraw Math FiguresArithmetic AnimationArithmetic Word ProblemsCounting with Tree DiagramsCube NetsCross SectionsMotion PathMechanicsWavesLight and LensesThermodynamicsHow Semiconductors WorkMolecular StructuresAtomic OrbitalsElectrochemical CellsChemical EquilibriumCrystal LatticesBuffer pHComplex IonsDNA Double HelixCell DivisionMembrane ChannelsNerve ImpulseRock ClassificationWeatherConstellationsSolar and Lunar Eclipses3D ModelingFloor PlanSeismic StructuresIntersection TurnMaglevCooking AnimationOrigamiLive Viewer CountGeoJSON MapRailway MapPopulation MapCrime MapLand Price MapSchool MapShrine and Castle MapHouse of Representatives MapWord MapSolitaireReversiHakoiri MusumeChessHamburgerRippleSlide Puzzle MakerNeon PinballNovel MakerJapanese Typing PracticePiano Score EditorMusic Theory

English

Python の dateutil で柔軟に日付をパース・操作する

dateutil は Python の日時処理を強力に拡張するサードパーティライブラリです。標準ライブラリでは面倒な処理も、dateutil を使えば簡潔に書けます。

インストール

pip でインストールできます。

pip install python-dateutil

parser:柔軟な日付パース

dateutil.parser は、さまざまな形式の日付文字列を自動で解析してくれます。

from dateutil import parser

# いろいろな形式を自動認識
print(parser.parse("2025-01-15"))
print(parser.parse("January 15, 2025"))
print(parser.parse("15/01/2025"))
print(parser.parse("2025年1月15日"))

strptime() のように書式を指定する必要がなく、人間が書いた日付文字列をそのまま解析できます。ログファイルや自然言語に近い入力を扱う場面で重宝します。

ただし曖昧な形式には注意が必要です。

from dateutil import parser

# 01/02/2025 は 1月2日? 2月1日?
dt = parser.parse("01/02/2025")
print(dt)  # 2025-01-02 00:00:00(デフォルトは月/日/年)

# 日/月/年として解釈させる
dt = parser.parse("01/02/2025", dayfirst=True)
print(dt)  # 2025-02-01 00:00:00

dayfirst=Trueyearfirst=True で解釈の優先順位を指定できます。

relativedelta:月や年の加減算

標準の timedelta では月や年を扱えませんが、relativedelta なら可能です。

from datetime import date
from dateutil.relativedelta import relativedelta

today = date(2025, 1, 15)

# 1ヶ月後
print(today + relativedelta(months=1))  # 2025-02-15

# 1年後
print(today + relativedelta(years=1))  # 2026-01-15

# 3ヶ月と5日前
print(today - relativedelta(months=3, days=5))  # 2024-10-10

月末の扱いも賢くしてくれます。

from datetime import date
from dateutil.relativedelta import relativedelta

# 1月31日の1ヶ月後は?
d = date(2025, 1, 31)
print(d + relativedelta(months=1))  # 2025-02-28

2月には31日がないため、自動的に月末の28日に調整されます。

2つの日付の差を詳細に取得

relativedelta は2つの日付の差を年・月・日で分解して返すこともできます。

from datetime import date
from dateutil.relativedelta import relativedelta

birth = date(1990, 5, 20)
today = date(2025, 1, 15)

delta = relativedelta(today, birth)
print(f"{delta.years}{delta.months}ヶ月 {delta.days}日")
# 34歳 7ヶ月 26日

年齢計算や勤続年数の表示に便利です。

rrule:繰り返しルールの生成

rrule は iCalendar の繰り返しルール(RRULE)に対応した日付生成機能です。

from datetime import date
from dateutil.rrule import rrule, MONTHLY, MO

# 2025年の毎月第2月曜日
rule = rrule(
    MONTHLY,
    byweekday=MO(2),
    dtstart=date(2025, 1, 1),
    count=12
)

for dt in rule:
    print(dt.date())

定期的なスケジュール生成や、カレンダーアプリのリピート機能実装に使えます。

tz:タイムゾーン操作

dateutil.tz はタイムゾーンの取り扱いを簡単にします。

from datetime import datetime
from dateutil import tz

# タイムゾーンを取得
jst = tz.gettz("Asia/Tokyo")
utc = tz.UTC

# 現在時刻を JST で取得
now_jst = datetime.now(jst)
print(now_jst)

# UTC に変換
now_utc = now_jst.astimezone(utc)
print(now_utc)

Python 3.9 以降は標準の zoneinfo モジュールも使えますが、dateutil.tz はそれ以前のバージョンでも動作します。

いつ dateutil を使うべきか

標準ライブラリで十分なケースもありますが、以下の場合は dateutil の導入を検討してください。

月や年の加減算

timedelta では扱えない。relativedelta を使う。

柔軟な日付パース

書式が不定のユーザー入力を扱う場合。parser で自動解析できる。

依存ライブラリを増やしたくない場合は標準ライブラリで頑張ることもできますが、日時処理が多いプロジェクトでは dateutil を入れておくと開発効率が上がります。