- ‘yyyy-mm-dd’ → datetime 型
- ’○ 年 ○ 月 ○ 日’ → datetime 型
- datetime 型 → ‘yyyy-mm-dd’
- datetime 型 → ‘○ 年 ○ 月 ○ 日’
‘yyyy-mm-dd’ → datetime 型 #
文字列を datetime 型に変換するには、strptime メソッドを使います。
第一引数に日付を表す文字列を入れ、第二引数にはstrftime() と strptime() の書式コードを使って、文字列をどのように解釈して datetime 型に変換するかを指定します。
文字列が2021-02-01の場合を考えてみます。
年は 2021、つまり 4 桁の整数ですね。その場合、書式コードより%Yが当てはまります。
月は 02 なので、%mが当てはまります。
そして日にちは 01 より、%dが当てはまります。
文字列に対応する年月日の書式コードが定まったので、文字列がどのような形なのかを指定します。
2021-02-01は年と月、月と日の間を - で区切ってあるので、 %Y-%m-%d という形式ですね。
これをstrptimeの第二引数に渡してやれば OK です。
import datetime
s = '2021-02-01'
dt = datetime.datetime.strptime(s, '%Y-%m-%d')
print(dt, type(dt)) # 2021-02-01 00:00:00 <class 'datetime.datetime'>
‘○ 年 ○ 月 ○ 日’ → datetime 型 #
この形のときも上と同様です。
例えば、2021年2月1日の場合、%Y年%m月%d日を第二引数で指定すれば OK です。
公式ドキュメントには、
%m | 0 埋めした 10 進数で表記した月。 | 01, 02, …, 12
と書いてあるので、0 埋めしていない 2 月や 1 日はどうやってやるんだろうと思いましたが、0 埋めでなくても問題なさそうです。
import datetime
s = '2021年2月1日'
dt = datetime.datetime.strptime(s, '%Y年%m月%d日')
print(dt, type(dt)) # 2021-02-01 00:00:00 <class 'datetime.datetime'>
datetime 型 → ‘○ 年 ○ 月 ○ 日’ #
datetime 型を文字列に変換するには、strftime()メソッドを使います。
strptime とは違い、これはインスタンスメソッドなので、datetime オブジェクトから呼び出します。
引数には strptime の第二引数と同様に、書式コードに従って書式を指定します。
例えば、2021-02-01のような文字列を作りたい場合は、dt.strftime("%Y-%m-%d")としてやればハイフン区切りの日付を出力できます。
import datetime
dt = datetime.datetime(year=2021,month=2,day=10)
s = dt.strftime("%Y-%m-%d")
print(s, type(s)) # 2021-02-10 <class 'str'>
datetime 型 → ‘yyyy-mm-dd’ #
こちらも同様に strftime を使います。 しかし、日本語で%m と%d は 10 進数を 0 埋めした月と日にちなので、1 桁の月日は 02 月 01 日のように表示されてしまいます。
import datetime
dt = datetime.datetime(year=2021,month=2,day=10)
s = dt.strftime("%Y年%m月%d日")
# 2021年02月10日 と出力されてしまう
0 埋めしないようにするには、%と Y,m,d のそれぞれの間に-をつけてやれば良いです。
これはざっと見た感じドキュメントに見当たりませんでした。
昔どこかのブログで他の言語でこの方法があったので、python でも試したらできました。
import datetime
dt = datetime.datetime(year=2021,month=2,day=10)
s = dt.strftime("%Y年%-m月%-d日")
# 2021年2月10日