2014-09-30 34 views
0

我有以下错误:如何解决无效的时间错误

[u"'00:56:93' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an invalid time."] 

是否有此修复程序,例如,没有项目可以是大于59?

因此,该功能会产生:

fix_time('00:56:93') 
00:56:59 
+1

我不知道这会工作。你想59以上的值被截断回59,还是添加到下一个(小时,分钟,秒),所以'00:56:93'实际上是'00:57:33'? – MattDMo 2014-09-30 21:56:14

+1

我不知道有什么像Python这样内置的东西。然而,我不禁想知道在什么情况下修复完全错误的时间戳是合理的事情? – NPE 2014-09-30 21:56:33

回答

1

溢出了起来:

import datetime 

stamp = '00:56:93' 
h, m, s = map(int, stamp.split(':')) 
seconds = h*3600 + m*60 + s 
new_stamp = str(datetime.timedelta(seconds=seconds)) 
# '0:57:33' 

,如果你只想限制数值:

maxima = (23, 59, 59) 
as_numbers = map(int, stamp.split(':')) 
with_limits = zip(as_numbers, maxima) 
limited = map(min, with_limits) 
str(datetime.time(*limited)) 
# '00:56:59' 

,如果你确信你总是有正好有两个数字,你甚至都不需要转换为整数:

0

您可以使用下面的功能 - 如果你想携带

def fix_time(value): 
    if not value: 
     return value 
    if not re.match('\d{2}:\d{2}:\d{2}',value): 
     return value 

    hours, minutes, seconds = int(value.split(':')[0]), int(value.split(':')[1]), int(value.split(':')[2]) 
    total_seconds = (seconds) + (minutes * 60) + (hours * 60 * 60) 
    formatted_seconds = total_seconds % 60 
    formatted_minutes = (total_seconds/60) % 60 
    formatted_hours = total_seconds/3600 
    value = '%.2d:%.2d:%.2d' % (formatted_hours, formatted_minutes, formatted_seconds) 
    return value 
相关问题