【Python】文字列と日付型(datetime・date)を相互変換する

この記事はPython文字列と日付型(datetime・date)を相互変換する方法の説明になります。参考になりましたら幸いです。

Pythonで文字列から日付型(datetime・date)に変換する

datetimeクラスのstrptimeクラスメソッドで文字列を日時型(datetime)に変換することができます。

>>> from datetime import datetime
>>> now_str = '2023/4/13 16:38:42'
>>> now_datetime = datetime.strptime(now_str, '%Y/%m/%d %H:%M:%S')
>>> print(now_datetime)
2023-04-13 16:38:42
>>> type(now_datetime)
<class 'datetime.datetime'>

strptimeメソッドは第一引数の文字列を第二引数のフォーマットにしたがって構文解析し日時型に変換します。 

ので、第一引数と第二引数でフォーマットが一致しないとValueErrorが発生しますのでご注意ください。

strptimeメソッドの詳細はこちら
https://docs.python.org/ja/3/library/datetime.html?highlight=datetime#datetime.datetime.strptime

日時型にしか変換できない(日付型・時刻型に変換する方法)

ただし、strptimeメソッドは文字列から直接日付型(date)や時刻型(time)には変換できません。

文字列から日付型や時刻型に変換するには、strptimeメソッドで一旦日時型に変換した後にdatetimeクラスのインスタンスメソッドで日付型や時刻型に変換します。

>>> from datetime import datetime
>>> now_str = '2023/4/13 16:38:42'
>>> now_datetime = datetime.strptime(now_str, '%Y/%m/%d %H:%M:%S')

# 日付型に変換
>>> now_date = now_datetime.date()
>>> print(now_date)
2023-04-13
>>> type(now_date)
<class 'datetime.date'>

# 時刻型に変換
>>> now_time = now_datetime.time() 
>>> print(now_time)
16:38:42
>>> type(now_time)
<class 'datetime.time'>

Pythonで日付型(datetime・date)から文字列に変換する

datetimeクラス、dateクラス、timeクラスそれぞれに実装されているstrftimeインスタンスメソッドで、日付型(datetime・date)や時刻型(time)を文字列に変換することができます。

>>> from datetime import datetime
>>> now_datetime = datetime.now()
>>> now_str = now_datetime.strftime('%Y/%m/%d %H:%M:%S')
>>> now_str
'2023/04/13 18:51:26'
>>> type(now_str)
<class 'str'>

strptimeメソッドは引数で指定したフォーマットの文字列に変換します。

strftimeメソッドの詳細はこちら
https://docs.python.org/ja/3/library/datetime.html?highlight=datetime#datetime.datetime.strftime

引数に指定するフォーマット

こちらがstrptimeメソッド、strftimeメソッドの引数に指定するフォーマットです。(両メソッド共通)

ディレクティブ意味使用例
%Y年 西暦4桁2023
%y年 西暦2桁23
%m月 10進表記04
%B月 月名April
%b月 短縮月名Apr
%d日 10進表記13
%w曜日 10進表記
0(日曜)
1(月曜)
2(火曜)
3(水曜)
4(木曜)
5(金曜)
6(土曜)
4
%A曜日 曜日名Thursday
%a曜日 短縮曜日名Thu
%H時 24時間表記16
%I時 12時間表記04
%p時 AM、PMPM
%M分 10進表記38
%S秒 10進表記42

ディレクティブに加え「/」「:」「 」(半角スペース)などのリテラルを組み合わせることも可能です。


>>> from datetime import datetime
>>> now_datetime = datetime.now() 

>>> now_datetime.strftime('%Y/%m/%d %H:%M:%S')
'2023/04/13 16:38:42'

>>> now_datetime.strftime('%Y-%m-%d %p%I:%M:%S')
'2023-04-13 PM04:38:42'

まとめ

今回紹介した相互変換方法をまとめました。

変換元 → 変換先使うメソッド
文字列 → 日時型(datetime)datetime.strptime()
日時型(datetime) → 日付型(date)datetime.date()
日時型(datetime) → 時刻型(time)datetime.time()
日時型(datetime) → 文字列datetime.strftime()
日付型(date) → 文字列date.strftime()
時刻型(time) → 文字列time.strftime()

以上がPythonで文字列と日付型(datetime・date)を相互変換する方法でした。

参考サイト
https://docs.python.org/ja/3/library/datetime.html#strftime-and-strptime-behavior

タイトルとURLをコピーしました