Python timedelta

时间:2020-02-23 14:43:36  来源:igfitidea点击:

Python timedelta对象用于以简单的方式执行日期时间操作。
timedelta类是datetime模块的一部分。

Pythoon timedelta

Python timedelta对象代表持续时间。
我们可以使用以下工厂方法创建其对象。

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

请注意,timedelta()函数采用关键字参数。
所有参数都是可选的,默认为0。
参数可以是整数或者浮点数,并且可以是正数或者负数。

timedelta对象使用基本运算符支持数学运算,例如加,减,乘等,因此使用起来非常简单。
它通常用于获取具有某些增量日期和时间的datetime对象。

Python timedelta示例

让我们看一些使用timedelta对象获取未来日期和过去日期的示例。

from datetime import datetime, timedelta

current_datetime = datetime.now()

# future dates
one_year_future_date = current_datetime + timedelta(days=365)

print('Current Date:', current_datetime)
print('One year from now Date:', one_year_future_date)

# past dates
three_days_before_date = current_datetime - timedelta(days=3)
print('Three days before Date:', three_days_before_date)

输出:

Current Date: 2016-09-18 12:33:30.656394
One year from now Date: 2019-09-18 12:33:30.656394
Three days before Date: 2016-09-15 12:33:30.656394

带有日期和时间的Python timedelta

Python timedelta也支持对date对象进行加减。

dt = current_datetime.date()
print('Current Date:', dt)
dt_tomorrow = dt + timedelta(days=1)
print('Tomorrow Date:', dt_tomorrow)

输出:

Current Date: 2016-09-18
Tomorrow Date: 2016-09-19

但是,timedelta不支持与时间对象进行相同的操作。

tm = current_datetime.time()
print('Current Time:', tm)
tm_after_30_mins = tm + timedelta(minutes=30)

上面的代码将产生以下错误消息。

TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'

Python timedelta属性

Python timedelta类具有三个属性。

print(timedelta.max)
print(timedelta.min)
print(timedelta.resolution)

输出:

999999999 days, 23:59:59.999999
-999999999 days, 0:00:00
0:00:00.000001

Python timedelta总秒数

Python timedelta对象total_seconds()方法返回秒总数。

print('Seconds in an year:', timedelta(days=365).total_seconds())

Python timedelta操作

让我们看一下timedelta对象之间的更多操作。

ct = current_datetime + timedelta(seconds=60) - timedelta(seconds=60)
print(current_datetime == ct)

ct = current_datetime + timedelta(seconds=10) * 6
print('Current Time:', current_datetime)
print('One Min from Current Time:', ct)

print('Timedelta absolute value:', abs(timedelta(days=-10)))
print('Timedelta String Representation:', str(timedelta(days=1, seconds=30, hours=10, milliseconds=300)))
print('Timedelta Object Representation:', repr(timedelta(days=1, seconds=30, hours=10, milliseconds=300)))

输出:

True
Current Time: 2016-09-18 12:47:28.331197
One Min from Current Time: 2016-09-18 12:48:28.331197
Timedelta absolute value: 10 days, 0:00:00
Timedelta String Representation: 1 day, 10:00:30.300000
Timedelta Object Representation: datetime.timedelta(days=1, seconds=36030, microseconds=300000)