Pythonお悩み解決

Pythonに関する疑問や悩みにこたえるブログです

日時データを文字列に変換したい

Pythonで日時データを文字列に変換する方法を解説します。

Pythonで日時データを文字列に変換するには、主に2つの方法があります。

それぞれ見ていきましょう。

1. isoformat()メソッドを使う

1つめはisoformat()メソッドを使う方法です。

これは年-月-日T時:分:秒.マイクロ秒のような書式で日時を表現します。

例として、datetimenow()メソッドで取得した現在日時(datetime型のオブジェクト)を、isoformat()メソッドで変換してみましょう。

>>> from datetime import datetime
>>> # 現在日時を取得
>>> dt = datetime.now()
>>> dt
datetime.datetime(2022, 7, 4, 20, 24, 54, 746371)
>>> # isoformat()で文字列に変換
>>> dt.isoformat()
'2022-07-04T20:24:54.746371'

日時データ(dt)が、年-月-日T時:分:秒.マイクロ秒という書式の文字列になったことを確認できました。

なお、マイクロ秒が0であれば、年-月-日T時:分:秒になります。

>>> # マイクロ秒が「0」の日時データを作成
>>> dt = datetime(2022, 7, 4, 12, 34, 56)
>>> dt
datetime.datetime(2022, 7, 4, 12, 34, 56)
>>> # isoformat()で文字列に変換
>>> dt.isoformat()
'2022-07-04T12:34:56'

また、isoformat()メソッドはdatetime型のオブジェクトだけでなく、date型やtime型のオブジェクトでも使えます。

date型のオブジェクトでisoformat()を使用した場合、以下のように年-月-日となります。

>>> from datetime import date
>>> td = date.today()
>>> td
datetime.date(2022, 7, 4)
>>> td.isoformat()
'2022-07-04'

time型のオブジェクトでisoformat()を使用した場合、以下のように時-分-秒となります(マイクロ秒が含まれる場合は時:分:秒.マイクロ秒)。

>>> from datetime import time
>>> t = time(12, 34, 56)
>>> t.isoformat()
'12:34:56'

なお、この書式は日付と時刻の表記に関する国際規格であるISO 8601に従っています。

日時をISO書式で表したい場合は、isoformat()メソッドを使うとよいでしょう。

2. strftime()メソッドを使う

2つめはstrftime()メソッドを使う方法です。

こちらは書式指定子を使い、自分で日時の書式を指定できます

たとえば、年/月/日 時:分:秒という書式の文字列に変換したい場合、以下のようにします。

>>> dt = datetime(2022, 7, 4, 12, 34, 56)
>>> # 「年/月/日 時:分:秒」という書式にする
>>> dt.strftime("%Y/%m/%d %H:%M:%S")
'2022/07/04 12:34:56'

%Y%mなどが書式指定子です。

よく使う書式指定子は以下のようなものがあります。

書式指定子 意味 使用例
%Y 西暦(4桁) 0001, 0002, ..., 2022, 2023, ..., 9998, 9999
%y 西暦(2桁) 00, 01, ..., 99
%m 01, 02, ..., 12
%B 月名 January, February, ..., December
%b 月名(短縮系) Jan, Feb, ..., Dec
%d 日にち 01, 02, ..., 31
%A 曜日名 Sunday, Monday, ..., Saturday
%a 曜日名(短縮系) Sun, Mon, ..., Sat
%H 時(24時間表記) 00, 01, ..., 23
%I 時(12時間表記) 01, 02, ..., 12
%p AM/PM AM, PM
%M 00, 01, ..., 59
%S 00, 01, ..., 59
%f マイクロ秒 000000, 000001, ..., 999999

なお、strftime()メソッドはdate型やtime型のオブジェクトでも使えます。

日時を表す書式を自分で指定したい場合は、strftime()メソッドを使うとよいでしょう。

メソッド名の覚え方:strftime()fとは

strftime()と似た名前のメソッドに、strptime()があります。

私はこの2つをなかなか区別できなったのですが、fpの意味が分かったら簡単に覚えられました。

strftime()fformatfです。

「フォーマット(format)」は「書式」ということなので、strftime()は日時データを指定した書式(format)で表すメソッドと覚えましょう。

strptime()については別の記事で解説予定です。

3. まとめ

  1. 日時データを文字列に変換するには、isoformat()strftime()を使う
    • 日時データ:datetime型、date型、time型のオブジェクト
  2. 日時をISO書式で表したい場合は、isoformat()メソッドを使う
    • ISO書式:年-月-日T時:分:秒.マイクロ秒など
  3. 日時を表す書式を自分で指定したい場合は、strftime()メソッドを使う

参考情報