Pythonでは、日付を表すためにdatetimeというモジュールが提供されています。しかし、datetimeモジュールで扱われる日付データの型は、文字列や数値型とは異なります。このため、日付データを文字列や数値型に変換する必要がある場合があります。この記事では、Pythonにおける日付データの型変換について解説します。日付データの型変換が必要になった場合に、どのように変換すれば良いのかを理解しましょう。
文字列 → 日付
datetimeモジュールを使用して文字列をdatetime型に変換できます。
“Z”は協定世界時 (UTC) を表します。
ミリ秒が無いとき
from datetime import datetime
str_date = "2022-01-01T00:00:00Z"
date1 = datetime.strptime(str_date, "%Y-%m-%dT%H:%M:%SZ")
print(date1)
# 2022-01-01 00:00:00
print(type(date1))
# <class 'datetime.datetime'>
ミリ秒まである時
from datetime import datetime
str_date = "2022-01-01T00:00:00.000000Z"
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
date2 = datetime.strptime(str_date, date_format)
print(date2)
# 2022-01-01 00:00:00
print(type(date2))
# <class 'datetime.datetime'>
ミリ秒まであれば、ちゃんと出力される。
from datetime import datetime
str_date = "2023-02-20T08:33:45.919241Z"
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
date3 = datetime.strptime(str_date, date_format)
print(date3)
# 2023-02-20 08:33:45.919241
print(type(date3))
# <class 'datetime.datetime'>
タイムゾーンを付与する
from datetime import datetime
import pytz
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
# UTCタイムゾーンオブジェクト
utc = pytz.utc
# replaceメソッドを使用して、datetimeオブジェクトにUTCタイムゾーン情報を付与
dt = datetime.strptime("2023-02-20T08:33:45.919241Z", date_format).replace(tzinfo=utc)
print(dt)
# 2023-02-20 08:33:45.919241+00:00
日付(datetime)→文字列
import datetime
now = datetime.datetime.today()
print(now.date())
print(now.date().strftime('%Y/%m/%d'))
# 2022-11-21
# 2022/11/21
実際に存在する日付か判定する
以下は、文字列”20220230″が有効な日付かどうかを確認する例です。
from datetime import datetime
date_string = '20220230'
try:
datetime.strptime(date_string, '%Y%m%d')
print(f'{date_string}は、有効な日付です。')
except ValueError:
print(f'{date_string}は、無効な日付です。')