はじめに
Pythonで日付・時刻の文字列フォーマット変更や、日時差の計算をする方法についてまとめる。日付・時刻処理はdatetimeのライブラリを使う。
ドキュメント
目次
現在の日付・時刻を取得する
datetime.now()で現在の日付・時刻を取得できる。取得した値からそれぞれ抜き出すこともできる。抜き出しのできるデータは下表の通り。
| パラメータ | 抜き出すデータ |
|---|---|
| .data() | 日付 |
| .time() | 時間 |
| .year | 年 |
| .month | 月 |
| .day | 日 |
| .hour | 時 |
| .minute | 分 |
| .second | 秒 |
| .microsecond | ms |
datetime_test.py
from datetime import datetime
td = datetime.now()
print(f'# {type(td) = } / {td}')
print(f'# {type(td.date()) = } / {td.date()}')
print(f'# {type(td.time()) = } / {td.time()}')
print(f'# {type(td.year) = } / {td.year}')
print(f'# {type(td.month) = } / {td.month}')
print(f'# {type(td.day) = } / {td.day}')
print(f'# {type(td.hour) = } / {td.hour}')
print(f'# {type(td.minute) = } / {td.minute}')
print(f'# {type(td.second) = } / {td.second}')
print(f'# {type(td.microsecond) = } / {td.microsecond}')
# type(td) = <class 'datetime.datetime'> / 2023-11-24 21:49:09.736613
# type(td.date()) = <class 'datetime.date'> / 2023-11-24
# type(td.time()) = <class 'datetime.time'> / 21:49:09.736613
# type(td.year) = <class 'int'> / 2023
# type(td.month) = <class 'int'> / 11
# type(td.day) = <class 'int'> / 24
# type(td.hour) = <class 'int'> / 21
# type(td.minute) = <class 'int'> / 49
# type(td.second) = <class 'int'> / 9
# type(td.microsecond) = <class 'int'> / 736613
日付・時刻を指定する
datetime()で任意の日付・時刻を指定することができる。型はdatetime.now()と同じとなる。
datetime_test.py
from datetime import datetime
#日付まで指定---
td = datetime(2023,11,24)
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-11-24 00:00:00
#時刻まで指定---
td = datetime(2023,11,24,9,10,15)
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-11-24 09:10:15
日付・時刻を計算する
datetime型同士の計算や比較ができる。また計算した結果は下記の通りにすると整数で値を取得できる。
| パラメータ | 内容 |
|---|---|
| .days | 日差を整数で返す |
| .seconds | 時間差を秒数で返す |
datetime_test.py
from datetime import datetime
#日付差======================
td1 = datetime(2023,11,24)
td2 = datetime(2023,10,24)
delta = td1 - td2
print(f'# {type(delta) = }/{delta}')
print(f'# {type(delta.days) = }/{delta.days}')
# type(delta) = <class 'datetime.timedelta'>/31 days, 0:00:00
# type(delta.days) = <class 'int'>/31
#時刻デルタ計算=============
td1 = datetime(2023,11,24,10,15,30)
td2 = datetime(2023,11,24,9,10,15)
delta = td1 - td2
print(f'# {type(delta) = }/{delta}')
print(f'# {type(delta.seconds) = }/{delta.seconds}')
# type(delta) = <class 'datetime.timedelta'>/1:05:15
# type(delta.seconds) = <class 'int'>/3915
#日付の比較=================
td1 = datetime(2023,11,24)
td2 = datetime(2023,10,24)
if (td > td2):
print(f'# td2が日付古い。')
日付を加算する
timedelta()を使うと、日付の加算ができる。
datetime_test.py
from datetime import timedelta
td = datetime(2023,11,25)
td = td + timedelta(days=5)
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-11-30 00:00:00
td = td + timedelta(weeks=2)
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-12-14 00:00:00
datetime→日付・時刻文字列変換
datetime型を日付・時刻文字列へ変換する。変換は.strftime()で行う、下記パラメータを使って、文字列フォーマットを指定する。
| パラメータ | 内容 |
|---|---|
| %Y | 4桁西暦 |
| %y | 2桁西暦 |
| %m | 2桁月 |
| %d | 2桁日 |
| %H | 2桁時間 |
| %M | 2桁分 |
| %S | 2桁秒 |
| %f | 6桁ms |
datetime_test.py
from datetime import datetime
td = datetime.now()
str_td = td.strftime('%Y/%m/%d %H:%M:%S.%f')
print(f'# {type(str_td) = } / {str_td}')
# type(str_td) = <class 'str'> / 2023/11/24 23:01:00.717843
str_td = td.strftime('%Y-%m-%d %H:%M:%S.%f')
print(f'# {type(str_td) = } / {str_td}')
# type(str_td) = <class 'str'> / 2023-11-24 23:01:00.717843
str_td = td.strftime('%Y%m%d')
print(f'# {type(str_td) = } / {str_td}')
# type(str_td) = <class 'str'> / 20231124
str_td = td.strftime('%y/%m/%d %H:%M:%S.%f')
print(f'# {type(str_td) = } / {str_td}')
# type(str_td) = <class 'str'> / 23/11/24 23:01:00.717843
日付・時刻文字列変換→datetime
日付・時刻文字列をdatetime型へ変換する。変換は.strptime()で行う。
datetime_test.py
from datetime import datetime
str_td = '2023-11-24T01:20:12'
ft = '%Y-%m-%dT%H:%M:%S'
td = datetime.strptime(str_td, ft)
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-11-24 01:20:12
ISOフォーマット文字列をdatetime型へ変換する場合は.fromisoformat()で行う。
datetime_test.py
from datetime import datetime
# ISOフォーマット文字列→datetime変換----------------------
td = datetime.fromisoformat('2023-11-24T01:20:12+09:00')
print(f'# {type(td) = } / {td}')
# type(td) = <class 'datetime.datetime'> / 2023-11-24 01:20:12+09:00
# ISOフォーマット文字列→datetime→文字列変換---------------
td = datetime.fromisoformat('2023-11-24T01:20:12+09:00')
str_td = td.strftime('%Y/%m/%d')
print(f'# {type(str_td) = } / {str_td}')
# type(str_td) = <class 'str'> / 2023/11/24
以上