この記事は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、PM | PM |
%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