概要

日付・時刻関係を取り扱う標準ライブラリ。 日付・時刻を datetime.datetime オブジェクトとして取り扱う

使い方

datetime: 日付・時刻のオブジェクト

コンストラクタで生成

from datetime import datetime, date, time

dt_ymd = datetime(2020, 10, 1)
dt_ymdHMS = datetime(2020, 10, 1, 15, 20, 10)
dt_ymdHMSmicroS = datetime(2020, 10, 1, 15, 20, 10, 123456)
print(dt_ymd)
# 2020-10-01 00:00:00
print(dt_ymdHMS)
# 2020-10-01 15:20:10
print(dt_ymdHMSmicroS)
# 2020-10-01 15:20:10.123456

d_ymd = date(2020, 10, 1)
print(d_ymd)
# 2020-10-01

t_H = time(15)
t_HM = time(15, 21)
t_HMS = time(15, 21, 10)
t_HMSmicroS = time(15, 21, 10, 123456)
print(t_H)
# 15:00:00
print(t_HM)
# 15:21:00
print(t_HMS)
# 15:21:10
print(t_HMSmicroS)
# 15:21:10.123456

現在の日付・時刻を取得

d_today = date.today()
# datetime.date(2023, 12, 8)
dt_now = datetime.now()
# datetime.datetime(2023, 12, 8, 13, 25, 29, 630801)

print(d_today)
# 2023-12-08
print(dt_now)
# 2023-12-08 13:25:29.630801

datetime ではなく time モジュールを使えば、現在時刻を unix time で取得できる。

import time

ut = time.time()
# 1702015381.590993

文字列をパースして取得

# 値, 書式の順に指定
ymd = datetime.strptime('2023-10-01', '%Y-%m-%d')
ymd_hms = datetime.strptime('2023/10/01 12:34:56', '%Y/%m/%d %H:%M:%S')

書式を指定して文字列に変換

dt = datetime.now()
# datetime.datetime(2023, 12, 10, 9, 10, 39, 145502)
dt_str = dt.strftime('%Y/%m/%d-%H:%M:%S.%f')
# 2023/12/10-09:10:39.145502

timedelta: 日時の差のオブジェクト

日時の差は datetime.timedelta オブジェクトで表される。

コンストラクタで生成

from datetime import datetime, timedelta

"""
コンストラクタ:
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
"""
delta_t = timedelta(days=1, hours=6, minutes=10, seconds=3)
# datetime.timedelta(days=1, seconds=22203)
print(delta_t)
# 1 day, 6:10:03

datetime の差を計算して取得

dt1 = datetime(2020, 10, 1, 15, 20, 10)
dt2 = datetime(2021, 11, 2, 16, 21, 11)
delta_t = dt2 - dt1
# datetime.timedelta(days=397, seconds=3661)

delta_t.days            # 397
delta_t.seconds         # 3661
delta_t.microseconds    # 0
delta_t.total_seconds() # 34304461.0
print(delta_t)
# 397 days, 1:01:01

timedelta を使った日時の足し引き

dt_start = datetime.strptime('2023-10-01', '%Y-%m-%d')
delta_t = timedelta(days=1)
for n in range(7):
    print(dt_start + n*delta_t)

"""
2023-10-01 00:00:00
2023-10-02 00:00:00
2023-10-03 00:00:00
2023-10-04 00:00:00
2023-10-05 00:00:00
2023-10-06 00:00:00
2023-10-07 00:00:00
"""