【问题标题】:ValueError: unconverted data remains: :00 when i want compare two timesValueError:未转换的数据仍然存在::00 当我想比较两次时
【发布时间】:2017-06-10 16:19:32
【问题描述】:

我想比较两次,我有一个错误

from time import strftime
from datetime import datetime
addtime = "18:00"
timeformat = '%H:%M'
now = strftime(timeformat)
print "Time: " + now
checkwhen = datetime.strptime(now, timeformat) - datetime.strptime(addtime, timeformat)
print "Added: "+str(checkwhen)+" ago" 
timecheck = str("00:15")

if (datetime.strptime(str(checkwhen), timeformat) < datetime.strptime(timecheck, timeformat)):
    print "ALERT!!!"

为什么 checkwhen 的输出是 0:07:00,我将 timeformat 设置为 '%H:%M'。我想这是我的问题,但我不知道我能解决它

error: : unconverted data remains: :00

【问题讨论】:

  • 我在您的第 3 行收到错误“NameError: name 'strftime' is not defined”。
  • 你需要导入它,pythonlearn,你能把你的错误的traceback放上来
  • strptime(str(checkwhen), ...) 毫无意义。你到底为什么要尝试这样做呢?
  • @Charles Duffy 因为当我不使用它时出现错误:TypeError: strptime() argument 1 must be string, not datetime.timedelta
  • @PythonLearn,我不是在问你为什么要添加 str()。我在问你为什么在你的增量上使用strptime()

标签: python python-2.7 time


【解决方案1】:

您可以格式化 timedelta 对象,因此您必须手动执行该操作。

timecheck = str("00:15")
checkwhen = ':'.join(str(checkwhen).split(':')[:-1])
if (datetime.strptime(str(checkwhen), timeformat) < datetime.strptime(timecheck, timeformat)):
    print "ALERT!!!"

【讨论】:

  • 如果跨越午夜边界,此代码将表现得非常糟糕。
  • checkwhen 是一个 timedelta 对象,那么如果你能提供一些有用的例子,这怎么可能跨越一些时间(午夜)边界
  • @pramod,它最初是一个 timedelta,但您在比较之前 将它强制转换为一个 datetime 对象——当它脱离 strptime 时,它不再是一个时间增量。这就是为什么 OP 要求做的事情毫无意义,以及为什么我对仅提供“使其工作”而不解决概念上的不匹配的战术性修复持怀疑态度。
  • @CharlesDuffy checkwhen 是 2 个日期时间对象的差异,这就是为什么它是 datetime.timedelta 的对象
  • 那是我的反对意见——直接的战术问题得到了解决,但导致该战术问题的潜在概念问题并未解决。
猜你喜欢
  • 2020-04-25
  • 2020-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-12-18
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多