Pythonで日付をスマートに操作!`datetime`モジュール、`dateutil`ライブラリ、`arrow`ライブラリを使いこなそう


django.utils.dateparse.parse_date() 関数は、文字列形式の日付を datetime.date オブジェクトに変換するものです。Django のフォームやテンプレートエンジンなどで、ユーザーが入力した日付情報を扱う際に役立ちます。

使い方

from django.utils.dateparse import parse_date

# 例1: "2024-05-25" という文字列を `datetime.date` オブジェクトに変換
date_object = parse_date("2024-05-25")
print(date_object)  # 出力: 2024-05-25

入力形式

parse_date() 関数は、以下の形式の文字列を受け付けます。

  • MM-DD-YYYY: 月-日-年の形式 (例: "05-25-2024")
  • DD/MM/YYYY: 日-月-年の形式 (例: "25/05/2024")
  • YYYY-MM-DD: 年-月-日の形式 (例: "2024-05-25")

出力

parse_date() 関数は、成功した場合、入力された文字列を datetime.date オブジェクトに変換して返します。失敗した場合、None を返します。

エラー処理

parse_date() 関数は、以下の場合に ValueError を発生させます:

  • 入力された日付が無効な場合 (例: "2024-02-31")
  • 入力形式が正しくない場合
  • Django の設定 TIME_ZONE によって、日付の解釈が変わる場合があります。
  • parse_date() 関数は、タイムゾーン情報を含まない日付のみを処理します。タイムゾーン情報を含む日付を処理するには、parse_datetime() 関数を使用する必要があります。


例1: 文字列形式の日付を datetime.date オブジェクトに変換

from django.utils.dateparse import parse_date

# "2024-05-25" という文字列を `datetime.date` オブジェクトに変換
date_object = parse_date("2024-05-25")
print(date_object)  # 出力: 2024-05-25

例2: 異なる形式の文字列を datetime.date オブジェクトに変換

from django.utils.dateparse import parse_date

# さまざまな形式の文字列を `datetime.date` オブジェクトに変換
date_objects = [
    parse_date("2024-05-25"),
    parse_date("25/05/2024"),
    parse_date("05-25-2024"),
    parse_date("Mon, 21 Jul 1987 17:34:23"),
    parse_date("21 July 1987"),
    parse_date("July 21, 1987"),
]

for date_object in date_objects:
    print(date_object)

例3: エラー処理

from django.utils.dateparse import parse_date

# 無効な形式の文字列を入力
try:
    parse_date("invalid_date_format")
except ValueError:
    print("エラー: 無効な形式の文字列です")

# 無効な日付を入力
try:
    parse_date("2024-02-31")
except ValueError:
    print("エラー: 無効な日付です")
from django.utils.dateparse import parse_datetime

# タイムゾーン情報を含む文字列を入力
date_string = "2024-05-25 13:00:00+09:00"

# `parse_date()` 関数はタイムゾーン情報を含まない日付のみを処理するため、`parse_datetime()` 関数を使用する
date_object = parse_datetime(date_string)
print(date_object)  # 出力: 2024-05-25 13:00:00+09:00


代替方法

以下に、django.utils.dateparse.parse_date() 関数の代替方法をいくつか紹介します。

  • 標準ライブラリの datetime モジュール

datetime モジュールは、Python に標準で用意されている日付処理ライブラリです。strptime() 関数を使用して、文字列形式の日付を datetime.date オブジェクトに変換することができます。

import datetime

# "2024-05-25" という文字列を `datetime.date` オブジェクトに変換
date_object = datetime.datetime.strptime("2024-05-25", "%Y-%m-%d").date()
print(date_object)  # 出力: 2024-05-25
  • dateutil ライブラリ

dateutil ライブラリは、datetime モジュールよりも多くの機能を提供するサードパーティ製ライブラリです。parser.parse() 関数を使用して、さまざまな形式の文字列形式の日付を datetime.date オブジェクトに変換することができます。

import dateutil.parser

# "2024-05-25" という文字列を `datetime.date` オブジェクトに変換
date_object = dateutil.parser.parse("2024-05-25")
print(date_object)  # 出力: 2024-05-25
  • arrow ライブラリ

arrow ライブラリは、人間にとって使いやすい日付処理 API を提供するサードパーティ製ライブラリです。parse() 関数を使用して、さまざまな形式の文字列形式の日付を arrow.Arrow オブジェクトに変換することができます。

import arrow

# "2024-05-25" という文字列を `arrow.Arrow` オブジェクトに変換
date_object = arrow.parse("2024-05-25")
print(date_object.date())  # 出力: 2024-05-25
方法利点欠点
django.utils.dateparse.parse_date()シンプルで使いやすいタイムゾーン情報を含む日付を処理できない
標準ライブラリの datetime モジュール標準ライブラリに含まれているdateutilarrow ライブラリほど多くの機能がない
dateutil ライブラリさまざまな形式の文字列形式の日付を処理できる標準ライブラリに含まれていない
arrow ライブラリ人間にとって使いやすい API を提供するdateutil ライブラリほど多くの機能がない