Pythonで日付や時刻を扱う方法について解説します。
日時処理には、標準ライブラリのtimeモジュールかdatetimeモジュールを使います。
date型、time型、datetime型などにオブジェクト化することで日時データに対して様々な処理を行うことができます。
日付と時刻を扱う(datetime)
文字列からdatetime型のオブジェクトを取得します。
1 2 3 4 5 6 7 8 9 | import datetime dt1 = datetime.datetime(2022, 1, 3) print(dt1) # 2022-01-03 00:00:00 dt2 = datetime.datetime(2022, 1, 3, 9, 20, 30, 500) print(dt2) # 2022-01-03 09:20:30.000500 |
現在日時の取得(now)
現在の日付と時刻を取得するにはnow()
メソッドを使用します。
1 2 3 4 5 | import datetime dt_now = datetime.datetime.now() print(dt_now) # 2022-01-03 10:23:22.414782 |
日付・時刻を書式を指定して文字列として取得(strftime)
strftime()
メソッドでdatetimeオブジェクトから任意の書式の文字列に変換することができます。引数に書式コードを組み合わせた書式を指定することで、任意の文字列を取得することができます。書式コードの詳細についてはPython公式ドキュメントを参照ください。
1 2 3 4 5 | print(dt_now.strftime('%Y年%m月%d日 %H:%M:%S')) # 2022年01月03日 10:23:22 print(dt_now.strftime('%Y/%m/%d %A %H:%M:%S')) # 2022/01/03 Monday 10:23:22 |
文字列から日付・時刻へ変換(strptime)
strptime()
メソッドで文字列からdatetimeオブジェクトを生成することができます。引数に文字列と文字列に対応する書式を指定する必要があります。
1 2 3 4 5 6 7 8 9 | dt_str = '2022/1/4 10:30' dt = datetime.datetime.strptime(dt_str, '%Y/%m/%d %H:%M') print(dt) # 2022-01-04 10:30:00 dt_str = '2022年1月4日 10:30:45' dt = datetime.datetime.strptime(dt_str, '%Y年%m月%d日 %H:%M:%S') print(dt) # 2022-01-04 10:30:45 |
日付(年月日)と時刻(時分秒)の値を取得
datetimeオブジェクトから年月日や時分秒の値を取得することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | dt_now = datetime.datetime.now() print(dt_now.year) # 2022 print(dt_now.month) # 1 print(dt_now.day) # 3 print(dt_now.hour) # 10 print(dt_now.minute) # 23 print(dt_now.second) # 22 print(dt_now.microsecond) # 414782 |
日付・時刻の加算・減算(timedelta)
datetimeオブジェクトに対して日数や分数などを加算や減算することができます。
時間差として指定できるのはweeks
, days
, hours
, minutes
, seconds
, milliseconds
, microseconds
です。
datetime – datetime.timedelta(時間差の値)
1 2 3 4 5 6 7 8 9 10 11 | dt1 = datetime.datetime(2022, 1, 3, 10, 23, 40, 500) print(dt1) # 2022-01-03 10:23:40.00500 dt2 = dt1 + datetime.timedelta(days=1) print(dt2) # 2021-01-04 10:23:40.00500 dt2 = dt1 - datetime.timedelta(hours=7) print(dt2) # 2021-12-27 03:23:40.00500 |
日付・時刻の差
2つのdatetimeオブジェクトの日付や時刻の差を求めることができます。
1 2 3 4 5 6 7 8 9 10 | dt1 = datetime.datetime(2022, 1, 3, 10, 23, 40, 500) print(dt1) #2022-01-03 10:23:40.000500 dt2 = datetime.datetime(2021, 9, 20, 10, 15, 22, 7500) print(dt2) #2021-09-20 10:15:22.007500 print(dt1 - dt2) # 105 days, 0:08:17.993000 |
日付・時刻の比較
2つのdatetimeオブジェクトを比較して結果をブール値(True/False)を取得することができます。
1 2 3 4 5 6 7 8 9 10 | dt1 = datetime.datetime(2022, 1, 3, 10, 23, 40, 500) print(dt1) #2022-01-03 10:23:40.000500 dt2 = datetime.datetime(2021, 9, 20, 10, 15, 22, 7500) print(dt2) #2021-09-20 10:15:22.007500 dt1 > dt2 # True |
ファイルの作成日時・更新日時を取得(getctime, getmtime)
ファイルの作成日時はos.path
のgetctime()
メソッドで取得できます。取得データはUNIX時間(エポック秒)のタイムスタンプになるため、fromtimestamp()
でdatetimeオブジェクトに変換します。
1 2 3 4 5 6 7 8 9 | import os ts = os.path.getctime('sample.xlsx') print(ts) # 1640920150.6993961 dt = datetime.datetime.fromtimestamp(ts) print(dt) # 2021-12-31 12:09:10.699396 |
ファイルの更新日時はos.path
のgetmtime()
メソッドで取得できます。こちらも 取得データはUNIX時間(エポック秒)のタイムスタンプになるため、fromtimestamp()
でdatetimeオブジェクトに変換します。
1 2 3 4 5 6 7 8 9 | import os ts = os.path.getmtime('sample.xlsx') print(ts) # 1640928950.0296733 dt = datetime.datetime.fromtimestamp(ts) print(dt) # 2021-12-31 14:35:50.029673 |
Pythonの日時処理について解説しました。