はじめに
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
以上