[Python] 日付操作の基本とテクニック:strftimeとstrptimeを活用して、文字列と日付を相互に変換する

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}は、無効な日付です。')