1

我有一个类似下面的字符串"0:07:38.701",表示 0 小时、7 分钟、38 秒和 701 毫秒。

然后我有一个datetime如下对象:datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)

我想添加这些时间(第一个是增量,而第二个是绝对时间参考)并获得一个新datetime.datetime对象。

我怎样才能做到这一点?

4

4 回答 4

4

一旦你有了 adatetime和 a timedelta,添加它们就像使用+运算符一样简单:

>>> dt = datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)
>>> td = datetime.timedelta(hours=0, minutes=7, seconds=38.701)
>>> dt + td
datetime.datetime(1945, 1, 3, 11, 52, 38, 745000)

timedelta没有类似于对象strptime的内置对象解析器datetime

有时您可以通过将字符串实际解析为 a 来伪造它datetime,然后提取字段以构建 a timedelta,但这既复杂又复杂——而且,对于您的简单格式,您可以简单地编写一个:

def strpdelta(s):
    hr, min, sec = map(float, s.split(':'))
    return datetime.timedelta(hours=hr, minutes=min, seconds=sec)
于 2013-10-07T21:13:16.370 回答
1

另一种解决方案,也是我迄今为止最喜欢的一种解决方案,因为它不需要手动解析并使用现有功能datetime来解析字符串格式的日期:

# Input times:
init_time       =  datetime.datetime(1945, 1, 3, 11, 45, 0, 44000)
time_to_add_str = '0:00:05.00'

# Adding them up:
time_to_add = datetime.strptime(time_to_add_str, '%H:%M:%S.%f') - datetime(1900,1,1)
final_time  = time_to_add  + init_time
于 2013-10-22T20:45:25.517 回答
1

您可以使用时间增量

>>> import datetime, re
>>> s = "0:07:38.701"
>>> hours, minutes, seconds = [float(val) for val in s.split(':')]
>>> delta = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds)
>>> datetime.datetime(1945, 1, 3, 11, 45, 0, 44000) + delta
datetime.datetime(1945, 1, 3, 11, 52, 38, 745000)
于 2013-10-07T21:09:00.903 回答
1

编辑:正如评论中指出的那样, timedelta 可以处理浮点值。即如果seconds=38.701,它会将其转换为secondsmilliseconds

from datetime import timedelta, datetime

dtime = datetime(1945, 1, 3, 11, 45, 0, 44000)
str = "0:07:38.701"

elems = str.split(':')
hr, min, sec= int(elems[0]), int(elems[1]), float(elems[2])

tdelta = timedelta(hours=hr, minutes=min, seconds=sec)

new_datetime = dtime + tdelta

编辑前的版本:

from datetime import timedelta, datetime

dtime = datetime(1945, 1, 3, 11, 45, 0, 44000)
str = "0:07:38.701"

stuff = str.split(':')
elems = stuff[:-1] + stuff[2].split('.')
hr, min, sec, mls= int(elems[0]), int(elems[1]), int(elems[2], int(elems[3]))

tdelta = timedelta(hours=hr, minutes=min, seconds=sec, milliseconds=mls)

new_datetime = dtime + tdelta
于 2013-10-07T21:15:21.727 回答