格式转换后,未转换的数据仍然保留

时间:2018-09-15 11:20:04

标签: python-3.x strptime

我看了其他与strptime和未转换的数据保留有关的问题,但是努力查看代码中哪里出了问题。

            currentTime = format(currentTime, '%H:%M:%S')
            #remove the current time from phone time
            timeDifferenceValue = datetime.datetime.strptime(str(currentTime), FMS) - datetime.datetime.strptime(
                str(ptime) + ":00", FMS)
            else:
                time_left = time_left[-7:]
                time_leftHatch = datetime.datetime.strptime(time_left, FMS) - timeDifferenceValue
                time_leftHatch = format(time_leftHatch, '%H:%M:%S')

在此阶段发现错误:

                                        time_leftHatch = datetime.datetime.strptime(time_left, FMS) - timeDifferenceValue

timeleft和timeDifference值的值为:

time_left = 1:29:47 timeDifferenceValue = 0:13:31

错误: 未转换的数据仍为::47

John在提到的评论中,我应该进行更改,以消除不必要时过多使用strptime的情况。这似乎解决了未转换的数据遗留问题。

例如,timeDifferenceValue已经采用时间格式,因此根本不需要更改。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

直接的问题是这样:

datetime.datetime.strptime("0:"+str(time_left), FMS)

我不确定为什么要在前面加上“ 0:”,但这会导致结果“ 0:1:29:47”,而您的strptime格式只能解析前三个值。 “未转换的数据”错误让您知道输入字符串中还有一些格式字符串无法处理的其他信息。

不过,更好的解决方法是停止字符串化和strptiming,这将继续使您感到悲伤。您已经有一些在代码中使用timedelta的提示。在Python中取时间之间的差将返回一个timedelta,将timedelta添加到一个时间将返回一个新时间。这样可以使您保持结构化数据和明确定义的结果。

例如,

# do this early, don't go back to string
phone_time = datetime.datetime.strptime(ptime + ':00', FMS)

# and leave this a datetime instead of stringifying it later
currentTime = datetime.datetime.now() + timedelta(hours=1)

# now you can just take the difference
timeDifferenceValue = currentTime - ptime

并且:

if str(timeDifferenceValue).__contains__("-"):

成为

if timeDifferenceValue < timedelta(0):

希望您将方向指向正确!