日付したい(pendulum

1$ pip3 install pendulum
1import pendulum
2now = pendulum.now()
3# 2024-09-10 22:34:08.405761+09:00

pendulumはデフォルトでタイムゾーン情報を含む(tz-awareな)日付モジュールです。

現在時刻を取得したい(pendulum.now

1import pendulum
2now = pendulum.now()
3# DateTime(2024, 9, 10, 22, 34, 8, 405761, tzinfo=Timezone('Asia/Tokyo'))
4
5print(now)
6# 2024-09-10 22:34:08.405761+09:00

nowで、タイムゾーン情報を含んだ(tz-awareな)現在時刻の日時オブジェクトを取得できます。 タイムゾーン情報は、システムの情報が参照されます。

日付から文字列にしたい(format

 1dt = pendulum.now()
 2dt.format("YYYY-MM-DDTHH:mm:ss.SSSSSSZ")
 3# 2024-09-10T22:34:08.405761+09:00
 4
 5# YYYY: 西暦(4桁)
 6# MM: 月(2桁; 0埋め)
 7# DD: 日(2桁; 0埋め)
 8# HH: 時(2桁; 24h)
 9# mm: 分(2桁; 0埋め)
10# ss: 秒(2桁; 0埋め)
11# SSSSSS: マイクロ秒(6桁; 0埋め)
12# Z: タイムゾーン; UTCオフセット
13
14# 時h分m秒s にして時刻を読みやすくした
15dt.format("YYYY-MM-DDTHH[h]mm[m]ss[s]SSSSSS[us]Z")
16# 2024-09-10T22h34m08s405761us+09:00

formatで、日付オブジェクトを文字列に変換できます。 変換するときに、フォーマットを指定できます。 エスケープしたい文字列は[]で囲みます。

1dt.to_iso8601_string()
2# => '2022-09-26T06:05:11+09:00'

日付オブジェクトをISO8601形式の文字列に変換したい場合は、``to_iso8601_string`が便利です。 また、その他の一般的な出力形式はCommon Formatsを参照してください。

文字列から日付にしたい(pendulum.parse

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'))

parseで、日付の文字列を日付オブジェクトに変換できます。 よく使われている日付の並びであれば、自動で推定してくれます。 第二引数にタイムゾーン名を指定できます。

独自の文字列から日付にしたい(pendulum.from_format

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'))

from_formatで、独自形式の文字列を日付オブジェクトに変換できます。 上記のサンプルは、Apacheのアクセスログに記録されている日付フォーマットです。 parseではエラーがでるのでfrom_formatで形式を指定する必要があります。 利用できる日付トークンはTokensを参照してください。

UNIX時間を日付にしたい(pendulum.from_timestamp

1import time
2import pendulum
3unix_time = time.time()
4# 1725976467.508806
5
6dt = pendulum.from_timestamp(unix_time)
7# 2024-09-10 13:54:27.508806+00:00

from_timestampでUNIX時間を日付オブジェクトに変換できます。 UNIX時間はtimeモジュールを使って取得できます。

ひと月後の日付が欲しい

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

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