我正在以字符串格式获取时间数据,'HH:MM',例如'13:33'将是13小时33分钟。
所以,我使用这段代码来获取时间对象并且效果很好
datetime.datetime.strptime('13:33', '%H:%M').time()
然而,我现在遇到了新的问题。新的字符串开始代表超过24小时而datetime.datetime.strptime('25:33', '%H:%M').time()
将会失败。你的建议是什么?
答案 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分钟以上的时间转换为小时,或者使用正则表达式获得所有想象力,或者在几天或几秒内添加支持。但是你必须更具体地说明这些数据的来源以及它应该代表什么。 :)