2015-04-13 6 views
1
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' 

Я ценю помощь Пожалуйста.

ответ

4

Проблема в том, что она говорит: timedelta объекты не имеют метода strftime. Если вы хотите отформатировать timedelta, вам нужно сделать это вручную. (Или используйте стороннюю библиотеку, которая предоставляет больше возможностей.)

Также обратите внимание, что конкретный вывод, который вы ищете, даже не имеет смысла. Дельта времени не делает месяцы и годы, просто дни и секунды, потому что месяцы и годы не имеют смысла. 35 дней - 35 дней независимо от того, когда вы начинаете считать, но 1 месяц и 5 дней может быть где-то от 33 дней до 36, так что это не согласованная временная дельта.

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 install python-dateutil 
+0

@ m.wasowski, спасибо. –

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' 
0

http://www.tutorialspoint.com/python/time_strftime.htm

time.strftime (формат [, т])

time.strftime ("% B% D% Y% H:% M:% S", Diff) (или попробовать time.gmtime (дифф), как показано на ссылке)

Вы используете diff.strftime, и разница не знает STRFTIME, импортируемый делает время, поэтому попробуйте time.strftime

Смежные вопросы