Python

【Python】日付と文字列を相互に変換する方法

MAX

日付と文字列の相互変換はstrptime、strftimeでできるが、慣れないうちはどっちがどっちか迷ったり、忘れて調べたりとかはよくある出来事。

  • 日付⇒文字列:strftime
  • 文字列⇒日付:strptime

また特定のフォーマット形式ならば、isoformat, fromisoformatでも相互に変換が可能である。

スポンサーリンク

日付を文字列に変換する

dateオブジェクト、datetimeオブジェクト共に、strftime, isoformatで日付を文字列に変換できる。

strftimeで文字列に変換

入力される文字列のフォーマットを指定することで、文字列に変換できる。

利用可能書式コードは以下のページで詳細を確認できる。

strftimeとstrptimeの書式コード

dateオブジェクト

1from datetime import date
2
3date.today().strftime("%Y/%m/%d")
4# '2022/09/03'

datetimeオブジェクト

1from datetime import datetime
2
3# フォーマットを指定して本日の日付を文字列に変換する
4datetime.today().strftime("%Y-%m-%d")
5# '2022-09-03'
6
7# %Hは24時間表記の時(%Iだと12時間表記の時になる)
8datetime.now().strftime("%Y%m%d_%H%M%S")
9# '20220903_094430'
10
11_date = datetime(2022, 1, 1)
12# datetime.datetime(2022, 1, 1, 0, 0)
13
14_date.strftime("%Y/%m/%d %H:%M:%S")
15# '2022/01/01 00:00:00'
16_date.strftime("%Y/%m/%d %I:%M:%S")
17# '2022/01/01 12:00:00'

指定できるフォーマットにはJan、Januaryなどの月表記やAM・PM表示、週表示など、色々できるので、必要に応じて指定すればいい。

isoformatで変換

こちらは決まった書式で日付が文字列に変換される。

1# dateオブジェクトの変換
2date.today().isoformat()
3# '2022-09-03'
4
5# datetimeオブジェクトの変換
6datetime.now().isoformat()
7# '2022-09-03T09:44:30.323276'
8
9_date = datetime(2022, 1, 1)
10_date.isoformat()
11# '2022-01-01T00:00:00'

dateオブジェクトはyyyy-mm-dd形式で文字列になる。

datetimeオブジェクトはyyyy-mm-ddThh:mm:ss.ffffff形式で文字列になる。

ffffffはマイクロ秒。これが0の場合は表示されない。

特にこだわりや決まりなどがなければ、isoformat()で文字列に変換しても十分だと思う。

マイクロ秒が不要なら削ればいいだけだし。

1datetime.now().isoformat()[:-7]
2# '2022-09-03T09:44:30'

文字列を日付に変換する

datetimeオブジェクトはstrptime, fromisoformatが使える。

dateオブジェクトはfromisoformatのみが使える。

strptimeで文字列をdatetimeに変換

変換対象の文字列と、その文字列の日付としてのフォーマットを指定すればOK。

1# 2022年1月1日 12時34分56秒
2datetime.strptime("20220101_123456", "%Y%m%d_%H%M%S")
3# datetime.datetime(2022, 1, 1, 12, 34, 56)
4
5# 2022年1月
6datetime.strptime("2022/1", "%Y/%m")
7# datetime.datetime(2022, 1, 1, 0, 0)
8# 日付が未指定の場合、月初の日付が初期値として設定される

なお、文字列と書式が合っていない場合、ValueErrorが発生する。

fromisoformatで文字列を日付型に変換

fromisoformat()は日付を文字列に変換したisoformt()の逆を行う。

1# dateオブジェクトに変換
2date.fromisoformat("2022-01-01")
3# datetime.date(2022, 1, 1)
4
5# datetimeオブジェクトに変換
6datetime.fromisoformat("2022-01-01 12:34:56:123456")
7# datetime.datetime(2022, 1, 1, 12, 34, 56, 123456)
8
9datetime.fromisoformat("2022-01-01")
10# datetime.datetime(2022, 1, 1, 0, 0)
11
12datetime.fromisoformat("2022-01-01 12")
13# datetime.datetime(2022, 1, 1, 12, 0)
14
15datetime.fromisoformat("2022-01-01 12:34")
16# datetime.datetime(2022, 1, 1, 12, 34)

datetimeの場合、時分秒はなくても動作する。

文字列を日付に変換する場合、大抵は色々なフォーマットになっていると思うのでstrptimeでその都度、フォーマットを指定して変換することが多いと思う。

まとめ

日付を文字列に変換

1date.today().strftime("%Y/%m/%d")
2# '2022/09/03'
3
4date.today().isoformat()
5# '2022-09-03'
6
7atetime.now().strftime("%Y%m%d_%H%M%S")
8# '20220903_094430'
9
10datetime.now().isoformat()
11# '2022-09-03T09:44:30.323276'

文字列を日付に変換

1date.fromisoformat("2022-01-01")
2# datetime.date(2022, 1, 1)
3
4datetime.strptime("20220101_123456", "%Y%m%d_%H%M%S")
5# datetime.datetime(2022, 1, 1, 12, 34, 56)
6
7datetime.fromisoformat("2022-01-01 12:34:56:123456")
8# datetime.datetime(2022, 1, 1, 12, 34, 56, 123456)
スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました