📅  最后修改于: 2023-12-03 15:14:37.459000             🧑  作者: Mango
在Python中,datetime模块提供了一个时间处理类,其中包含了许多日期和时间的函数和方法。其中就包括 timedelta 类,它代表两个日期或时间之间的差异。timedelta 可以分别设置天数、秒数、微秒数。不幸的是,它不能直接包含或处理以月或年为单位的时间隔离差异。
使用 timedelta ,你可以计算两个 datetime 对象之间的时间差。以下是 timedelta 类的构造函数:
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
参数说明:
下面是一些示例:
from datetime import datetime, timedelta
# 建立一个时间差值对象
td1 = timedelta(days=1, hours=10, minutes=32, seconds=12)
# 两个datetime相减会得到一个这个两个datetime之间的时间差值对象
dt1 = datetime(2022, 1, 1, 0, 0, 0)
dt2 = datetime.now()
td2 = dt2 - dt1
# 我们现在有一个时间差值对象和一个datetime对象,我们可以通过加法来获取新的datetime对象
dt3 = dt1 + td2
timedelta 类返回的时间差异值可以设置为不同的单位,包括天、小时、分钟、秒和毫秒。
from datetime import datetime, timedelta
td = timedelta(days=10, hours=4, minutes=30, seconds=12)
print(td.days) # 输出 10
print(td.seconds) # 输出 16212
print(td.microseconds)# 输出 0
total_seconds = td.total_seconds()
print(total_seconds) # 输出 886812.0,表示总共的秒数
timedelta 类不提供以月和年为单位的时间差异。你可以通过使用 dateutil 库或 Pandas 库的 offset 对象来解决这个问题。
dateutil 库:
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
dt1 = datetime(2000, 1, 1)
dt2 = datetime(2022, 1, 1)
delta = relativedelta(dt2, dt1)
print(delta.years) # 输出 22
print(delta.months) # 输出 0
print(delta.days) # 输出 0
Pandas 库:
import pandas as pd
date1 = pd.to_datetime('2000-01-01')
date2 = pd.to_datetime('2022-01-01')
diff = date2 - date1
print(diff)
# 输出:8033 days 00:00:00
months = diff // pd.Timedelta(days=30)
print(months)
# 输出:267 months