如何使用python日期格式字符串和strtime函数将天数转换为小时数?

如何使用python日期格式字符串和strtime函数将天数转换为小时数?,python,datetime,datetime-format,Python,Datetime,Datetime Format,我正在处理从mongoDB检索的日期,但是,它们的格式不尽相同。它们有三种不同的格式: 1. '%H:%M:%S' (Hours:Minutes:Seconds) 2. '%H:%M:%S.f' (Hours:Minutes:Seconds:Milliseconds) 3. Days.Hours:Minutes:Seconds:Milliseconds 我想计算数据库中所有记录的总时间。日期以字符串格式存储,因此我使用strtime函数检索一个时间对象,然后使用该时间对象生成一个时间增量,以便

我正在处理从mongoDB检索的日期,但是,它们的格式不尽相同。它们有三种不同的格式:

1. '%H:%M:%S' (Hours:Minutes:Seconds)
2. '%H:%M:%S.f' (Hours:Minutes:Seconds:Milliseconds)
3. Days.Hours:Minutes:Seconds:Milliseconds
我想计算数据库中所有记录的总时间。日期以字符串格式存储,因此我使用strtime函数检索一个时间对象,然后使用该时间对象生成一个时间增量,以便将其全部相加:

formats = ('%H:%M:%S', '%%H:%M:%S.f', <3rd format here>)
for db_item in db_collection:
    for fmt in formats:
       try:
           temp = datetime.strptime(db_item, fmt)
           temp = datetime.timedelta(hours=temp.hour, 
                                     minutes=temp.minute, 
                                     seconds=temp.minute,
                                     milliseconds=(temp.microsecond / 1000)
           return temp
       except ValueError as e:

平均值:1天(24小时)、1小时、20分钟、40秒和97毫秒

我的目标是: 25:20:40.97(24小时+1小时)


是否有一种格式允许这样做?或者我应该分别提取n天,乘以24,然后手动添加?

您可以尝试
%d
格式代码。但是,您会遇到一些限制,因为
%d
是一个月中的一天,这意味着它是一个范围(1,31+1)内的整数。 datetime.datetime专门用于日期和时间,而不是持续时间

使用regex解析字符串并直接构造timedelta可能比使用
%d
格式代码更容易

这里有一个正则表达式,它适用于所有3种持续时间格式

重新导入
模式=重新编译(
"""
#0?删除前导零
#天和毫秒是可选的
(?:(\d+)?#天
0?(\d+):#小时
0?(\d+):#分钟
0?(\d+)#秒
(?:.(\d+))#毫秒
""",
重复冗长
)
匹配=模式。完全匹配(“01:20:40”)
如果匹配不为无:#如果fullmatch失败,则匹配为无
打印(match.groups())
匹配=模式。完全匹配(“01:20:40.97”)
如果匹配项不是无:
打印(match.groups())
匹配=模式。完全匹配(“1.01:20:40.97”)
如果匹配项不是无:
打印(match.groups())
输出

(无,'1','20','40',无)
(无,'1','20','40','97')
('1', '1', '20', '40', '97')

函数
datetime.timedelta()
不能给出
25:20:40.97
,只能给出
1day,01:20:40.970000
1.01:20:40.97