如何将timedelta对象转换为datetime对象

42 投票
6 回答
100024 浏览
提问于 2025-04-15 20:13

如何把一个时间差对象(timedelta)转换成一个日期时间对象(datetime)呢?

我第一时间想到的是用类似 datetime(0)+deltaObj 这样的方式,但感觉不太好……难道没有什么 toDateTime() 这样的函数吗?

6 个回答

1

我发现可以使用.total_seconds()这个方法,然后用它来创建一个新的时间对象(如果需要的话,也可以创建一个日期时间对象)。

import time
import datetime

start_dt_obj = datetime.datetime.fromtimestamp(start_timestamp)
stop_dt_obj = datetime.datetime.fromtimestamp(stop_timestamp)
delta = stop_dt_obj - start_dt_obj

delta_as_time_obj = time.gmtime(delta.total_seconds())

这样你就可以做一些类似这样的事情:

print('The duration was {0}'.format(
    time.strftime('%H:%M', delta_as_time_obj)
)
2

因为日期时间(datetime)表示的是一天中的某个时刻,所以你的时间差(timedelta)应该少于24小时(86400秒)。不过,时间差本身并没有这个限制。

import datetime

seconds = 86399
td = datetime.timedelta(seconds=seconds)
print(td)
dt = datetime.datetime.strptime(str(td), "%H:%M:%S")
print(dt)

23:59:59
1900-01-01 23:59:59

如果你不想要一个默认的日期,并且知道你的时间差的具体日期:

date = "05/15/2020"
dt2 = datetime.datetime.strptime("{} {}".format(date, td), "%m/%d/%Y %H:%M:%S")
print(dt2)

2020-05-15 23:59:59
52

把一个时间间隔(timedelta)转换成具体的日期时间(datetime)是没有意义的,但从一个起始的日期时间出发,加上或减去一个时间间隔就很有意义了。

>>> import datetime
>>> today = datetime.datetime.today()
>>> today
datetime.datetime(2010, 3, 9, 18, 25, 19, 474362)
>>> today + datetime.timedelta(days=1)
datetime.datetime(2010, 3, 10, 18, 25, 19, 474362)

撰写回答