Come trovare differenza tra i due date e gli orari?

voti
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)) 

Questo è quello che ho lavorato con ... Ho cercato per anni per ottenere questo per funzionare correttamente, ma posso solo dire di errore:

AttributeError: 'datetime.timedelta' object has no attribute 'strftime'

Apprezzerei aiuto per favore.

È pubblicato 13/04/2015 alle 11:06
dall'utente
In altre lingue...                            


4 risposte

voti
4

Il problema è esattamente ciò che dice: timedeltagli oggetti non hanno un strftimemetodo. Se si desidera formattare un timedelta, è necessario farlo manualmente. (O utilizzare una libreria di terze parti che offre più funzionalità.)

Si noti inoltre che l'output specifico che stai cercando non ancora veramente senso. delta orario non fanno mesi e anni, pochi giorni e secondi, perché mesi e anni non avrebbe senso. 35 giorni è di 35 giorni, non importa quando si avvia il conteggio, ma 1 mese e 5 giorni potrebbe essere ovunque da 33 giorni a 36, ​​quindi non è un delta temporale coerente.

Risposto il 13/04/2015 a 11:13
fonte dall'utente

voti
2

È possibile utilizzare 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

Se non lo avete installato è possibile installarlo con pip:

  pip install python-dateutil
Risposto il 13/04/2015 a 11:15
fonte dall'utente

voti
0

Nel caso in cui, non si desidera utilizzare dateutil, è necessario scrivere un costume strftimesimile strftimedeltae, come suggerito @abarnet con solo (giorni, ore, secondi) 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'
Risposto il 13/04/2015 a 11:17
fonte dall'utente

voti
0

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

time.strftime (formato [, t])

time.strftime ( "% b% d% Y% H:% M:% S", diff) (o provare time.gmtime (diff) come mostrato sul link)

Si utilizza diff.strftime, e diff non sa strftime, il tempo importato lo fa, in modo da provare time.strftime

Risposto il 13/04/2015 a 11:21
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more