from datetime import *
from time import *
release = "15-07-2015 23:59:59"
now = datetime.now()
currentTime = (now.strftime("%d-%m-%Y %H:%M:%S"))
release = datetime.strptime(release, "%d-%m-%Y %H:%M:%S")
currentTime = datetime.strptime(currentTime, "%d-%m-%Y %H:%M:%S")
diff = release - currentTime
(diff.strftime("%m Months %dDays %Y Years %H Hours %M Minutes %S Seconds"))
这就是我一直在使用的...我已经尝试了很长时间才能让它正常工作但我只能说错误:
AttributeError: 'datetime.timedelta' object has no attribute 'strftime'
我很感激你的帮助。
答案 0 :(得分:4)
问题正是它所说的:timedelta
个对象没有strftime
方法。如果要格式化timedelta
,则必须手动执行。 (或使用提供更多功能的第三方库。)
另外,请注意,您正在寻找的具体输出甚至没有意义。时间增长不会做几个月和几年,只有几天和几秒 - 因为几个月和几年都没有意义。无论你什么时候开始计算,35天都是35天,但是1个月和5天可能是从33天到36天不等,所以这不是一个一致的时间差。
答案 1 :(得分:2)
您可以使用dateutil.relativedelta
:
from dateutil import relativedelta
diff = relativedelta.relativedelta(release, currentTime)
print("{} Months {} Days {} Years {} Hours {} Minutes {} Seconds".format(
diff.months,diff.days,diff.years,
diff.hours, diff.minutes,diff.seconds))
3 Months 2 Days 0 Years 10 Hours 37 Minutes 25 Seconds
如果您没有安装它,可以使用pip安装它:
pip install python-dateutil
答案 2 :(得分:0)
如果您不想使用dateutil
,则需要编写自定义strftime
,例如strftimedelta
和@abarnet建议,只需(天,小时,秒)ifro
def strftimedelta(tdelta, fmt):
d = {"days": tdelta.days}
d["hours"], rem = divmod(tdelta.seconds, 3600)
d["minutes"], d["seconds"] = divmod(rem, 60)
return fmt.format(**d)
strftimedelta(diff, "{days} days {hours} hours {minutes} minutes {seconds} seconds")
'93 days 6 hours 19 minutes 3 seconds'
答案 3 :(得分:0)
http://www.tutorialspoint.com/python/time_strftime.htm
time.strftime(格式[,t])
time.strftime(“%b%d%Y%H:%M:%S”,差异)(或尝试time.gmtime(diff),如链接所示)
你正在使用diff.strftime,并且diff不知道strftime,导入的时间确实如此,所以请尝试time.strftime