日付したい(pendulum

1$ pip3 install pendulum

Pendulumはデフォルトでタイムゾーンを考慮する日付管理パッケージです。 Python標準にはdatetimedatetimeなどのモジュールがありますが、どれを使ったらよいかいつも悩みます。 Pendulumはそんな悩みから解放してくれるのでオススメです。

現在時刻を取得したい

1import pendulum
2now = pendulum.now()
3# => DateTime(2022, 10, 24, 12, 51, 43, 38054, tzinfo=Timezone('Asia/Tokyo'))

一般的な日付フォーマットを取得したい

1pendulum.parse("2022-09-26T17:00:00")
2# => DateTime(2022, 9, 26, 17, 0, 0, tzinfo=Timezone('UTC'))
1pendulum.parse("2022-09-26T17:00:00", tz="Asia/Tokyo")
2# => DateTime(2022, 9, 26, 17, 0, 0, tzinfo=Timezone('Asia/Tokyo'))

独自の日付フォーマットを取得したい

1pendulum.from_format("26/Sep/2022:06:05:11 +0000", "DD/MMM/YYYY:HH:mm:ss ZZ")
2# => DateTime(2022, 9, 26, 6, 5, 11, tzinfo=Timezone('+00:00'))
1pendulum.from_format("26/Sep/2022:06:05:11 +0900", "DD/MMM/YYYY:HH:mm:ss ZZ")
2# => DateTime(2022, 9, 26, 6, 5, 11, tzinfo=Timezone('+09:00'))

ここで使ったサンプルはApacheのログに記録されている日付フォーマットです。 parseではエラーがでるのでfrom_formatで形式を指定する必要があります。 利用できる日付トークンはTokensを参照してください。

日付フォーマットをISO標準に変換したい

1dt = pendulum.parse("2022-09-26T17:00:00")
2dt.isoformat()
3# => '2022-09-26T17:00:00+00:00'
1dt = pendulum.from_format("26/Sep/2022:06:05:11 +0900", "DD/MMM/YYYY:HH:mm:ss ZZ")
2dt.to_iso8601_string()
3# => '2022-09-26T06:05:11+09:00'

parseまたはfrom_formatで読み込んだ日付を、ISO標準形式で出力したい場合は多いです。 to_isoformat()to_iso8601_stringも出力結果は同じです。 その他の出力可能な形式はCommon Formatsを参照してください。

ひと月後の日付が欲しい

1dt = pendulum.date(2018, 12, 1)
2dt.add(months=1)
3# => Date(2019, 1, 1)

日付の足し算や引き算もできます。 その際、年の繰り越しもきちんと扱ってくれます。