将字符串转换为datetime.time,错误?

时间:2013-01-15 01:17:48

标签: python

我正在以字符串格式获取时间数据,'HH:MM',例如'13:33'将是13小时33分钟。

所以,我使用这段代码来获取时间对象并且效果很好

datetime.datetime.strptime('13:33', '%H:%M').time()

然而,我现在遇到了新的问题。新的字符串开始代表超过24小时而datetime.datetime.strptime('25:33', '%H:%M').time()将会失败。你的建议是什么?

3 个答案:

答案 0 :(得分:1)

datetime.time对象代表(本地)时间,与任何特定日期无关。

你不应该用它来表示经过的时间,就像你看起来那样。

更合适的可能是datetime.timedelta

  

timedelta对象表示持续时间,即两个日期或时间之间的差异。

     

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

     

所有参数都是可选的,默认为0.参数可以是整数,长整数或浮点数,可以是正数或负数。

一个例子:

>>> from datetime import timedelta
>>> d = timedelta(hours=25,minutes=10)
>>> d
datetime.timedelta(1, 4200) #Days, seconds

答案 1 :(得分:0)

当你说“它会失败”时,我想你想知道什么时候会失败。这是一种方法:

>>> import datetime
>>>
>>> time_strs = [
... "13:33",
... "25:33",
... "12:88"
... ]
>>>
>>> for s in time_strs:
...     try:
...         print datetime.datetime.strptime(s, '%H:%M').time()
...     except ValueError:
...         print "Bad time: {0}".format(s)
...
13:33:00
Bad time: 25:33
Bad time: 12:88

答案 2 :(得分:0)

你必须手动完成这项工作,唉。

def parse_stopwatch(s):
    hours, minutes = s.split(':', 1)
    return datetime.time(hour=int(hours), minute=int(minutes))

这真是愚蠢,被授予。您可以自动将60分钟以上的时间转换为小时,或者使用正则表达式获得所有想象力,或者在几天或几秒内添加支持。但是你必须更具体地说明这些数据的来源以及它应该代表什么。 :)