Python 3.x 未转换的数据在格式化后仍保留

Python 3.x 未转换的数据在格式化后仍保留,python-3.x,strptime,Python 3.x,Strptime,我已经看了与strtime和未转换数据相关的其他问题,但是很难看出我在代码中的错误 currentTime = format(currentTime, '%H:%M:%S') #remove the current time from phone time timeDifferenceValue = datetime.datetime.strptime(str(currentTime), FMS) - datetime.da

我已经看了与strtime和未转换数据相关的其他问题,但是很难看出我在代码中的错误

            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 Value的值为:

左时间=1:29:47 时差值=0:13:31

错误: 未转换的数据仍然存在::47

John在评论中提到,我应该改变并删除不必要时过度使用的strtime。这似乎已经解决了未转换数据的遗留问题

例如,timeDifferenceValue的格式已经是time,因此根本不需要更改


有什么想法吗?

眼前的问题是:

datetime.datetime.strptime("0:"+str(time_left), FMS)
我不知道为什么要在前面加上“0:”,但结果是“0:1:29:47”,您的strtime格式只解析前三个值。“未转换数据”错误让您知道输入字符串中有一些格式字符串无法处理的额外信息

不过,更好的解决办法是停止串字和串字,这将继续给你带来悲伤。您已经有了一些在代码中使用
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 timeDifferenceValue < timedelta(0):
如果timeDifferenceValue

希望这能为你指明正确的方向

当前的问题是:

datetime.datetime.strptime("0:"+str(time_left), FMS)
我不知道为什么要在前面加上“0:”,但结果是“0:1:29:47”,您的strtime格式只解析前三个值。“未转换数据”错误让您知道输入字符串中有一些格式字符串无法处理的额外信息

不过,更好的解决办法是停止串字和串字,这将继续给你带来悲伤。您已经有了一些在代码中使用
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 timeDifferenceValue < timedelta(0):
如果timeDifferenceValue

希望这能为你指明正确的方向

您可以将代码简化为一个失败的
strtime
。请这样做,并张贴输入字符串和格式字符串,没有多余的其他代码。嗨,约翰,谢谢你的评论。抱歉,我对Python还比较陌生,但我不太清楚将它变成单个strtime是什么意思。代码中几乎所有的值实际上都是字符串(我认为其中一个除外,我现在已经从中删除了strtime)。通过删除此strtime,它似乎已经解决了此问题。我不明白这有多不幸,因为我假设它会因为FMS而转换。现在我将删除任何不必要的代码。再次感谢!您可以将代码简化为一个失败的
strtime
。请这样做,并张贴输入字符串和格式字符串,没有多余的其他代码。嗨,约翰,谢谢你的评论。抱歉,我对Python还比较陌生,但我不太清楚将它变成单个strtime是什么意思。代码中几乎所有的值实际上都是字符串(我认为其中一个除外,我现在已经从中删除了strtime)。通过删除此strtime,它似乎已经解决了此问题。我不明白这有多不幸,因为我假设它会因为FMS而转换。现在我将删除任何不必要的代码。再次感谢!你好,阿伦,非常感谢你的解释。你的“0:”绝对正确。实际上,我最终删除了这个。最初,之所以这样做是因为我使用的是AWS图像识别,它从屏幕截图中提取手机时间,然后从当前时间中扣除。这意味着我必须在开始时添加一个0:。但是,这不应该是一个问题了,因为默认情况下,如果需要,它将转到01:XX:XX。太好了!我添加了更多关于datetime和timedelta的内容。希望有帮助。欢迎来到Python!你好,阿伦,非常感谢你的解释。你的“0:”绝对正确。实际上,我最终删除了这个。最初,之所以这样做是因为我使用的是AWS图像识别,它从屏幕截图中提取手机时间,然后从当前时间中扣除。这意味着我必须在开始时添加一个0:。但是,这不应该是一个问题了,因为默认情况下,如果需要,它将转到01:XX:XX。太好了!我添加了更多关于datetime和timedelta的内容。希望有帮助。欢迎来到Python!