Wie kann ich die Zeitdifferenz zwischen zwei Datetime-Objekten in Python finden?
-
20-09-2019 - |
Frage
Wie kann ich feststellen, die Zeitdifferenz in Minuten zwischen zwei datetime
Objekten?
Lösung
>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a
datetime.timedelta(0, 8, 562000)
>>> divmod(c.days * 86400 + c.seconds, 60)
(0, 8) # 0 minutes, 8 seconds
Andere Tipps
Neu bei Python 2.7 ist die timedelta
Instanzmethode .total_seconds()
. Aus der Python-Dokumentation, ist dies gleichbedeutend mit (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
.
Referenz: http://docs.python.org/2/library/datetime .html # datetime.timedelta.total_seconds
>>> import datetime
>>> time1 = datetime.datetime.now()
>>> time2 = datetime.datetime.now() # waited a few minutes before pressing enter
>>> elapsedTime = time2 - time1
>>> elapsedTime
datetime.timedelta(0, 125, 749430)
>>> divmod(elapsedTime.total_seconds(), 60)
(2.0, 5.749430000000004) # divmod returns quotient and remainder
# 2 minutes, 5.74943 seconds
Verwenden von Datetime-Beispiel
>>> from datetime import datetime
>>> then = datetime(2012, 3, 5, 23, 8, 15) # Random date in the past
>>> now = datetime.now() # Now
>>> duration = now - then # For build-in functions
>>> duration_in_s = duration.total_seconds() # Total number of seconds between dates
Laufzeit in Jahren
>>> years = divmod(duration_in_s, 31556926)[0] # Seconds in a year=31556926.
Laufzeit in Tagen
>>> days = duration.days # Build-in datetime function
>>> days = divmod(duration_in_s, 86400)[0] # Seconds in a day = 86400
Dauer in Stunden
>>> hours = divmod(duration_in_s, 3600)[0] # Seconds in an hour = 3600
Dauer in Minuten
>>> minutes = divmod(duration_in_s, 60)[0] # Seconds in a minute = 60
Dauer in Sekunden
>>> seconds = duration.seconds # Build-in datetime function
>>> seconds = duration_in_s
Dauer in Mikrosekunden
>>> microseconds = duration.microseconds # Build-in datetime function
Gesamtdauer zwischen den beiden Daten
>>> days = divmod(duration_in_s, 86400) # Get days (without [0]!)
>>> hours = divmod(days[1], 3600) # Use remainder of days to calc hours
>>> minutes = divmod(hours[1], 60) # Use remainder of hours to calc minutes
>>> seconds = divmod(minutes[1], 1) # Use remainder of minutes to calc seconds
>>> print("Time between dates: %d days, %d hours, %d minutes and %d seconds" % (days[0], hours[0], minutes[0], seconds[0]))
oder einfach:
>>> print(now - then)
subtrahieren Nur eine von der anderen Seite. Sie erhalten ein timedelta
Objekt mit dem Unterschied.
>>> import datetime
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now() # after a 5-second or so pause
>>> d2 - d1
datetime.timedelta(0, 5, 203000)
Sie können dd.days
, dd.seconds
und dd.microseconds
auf Minuten konvertieren.
Wenn a
, b
Datetime-Objekte werden dann in Python die Zeitdifferenz zwischen ihnen finden 3:
from datetime import timedelta
time_difference = a - b
time_difference_in_minutes = time_difference / timedelta(minutes=1)
Bei älteren Python-Versionen:
time_difference_in_minutes = time_difference.total_seconds() / 60
Wenn a
, b
sind naive Datetime-Objekte wie durch datetime.now()
kehrte dann kann das Ergebnis falsch sein, wenn die Objekte Ortszeit mit unterschiedlichem UTC-Offsets zum Beispiel darstellen, um DST Übergänge oder für vergangene / zukünftige Termine. Weitere Informationen:. finden, wenn 24 Stunden zwischen Datetimes bestanden haben - Python
zuverlässige Ergebnisse zu erhalten, verwenden UTC-Zeit oder Zeitzone-aware Datetime-Objekte.
Verwenden divmod:
now = int(time.time()) # epoch seconds
then = now - 90000 # some time in the past
d = divmod(now-then,86400) # days
h = divmod(d[1],3600) # hours
m = divmod(h[1],60) # minutes
s = m[1] # seconds
print '%d days, %d hours, %d minutes, %d seconds' % (d[0],h[0],m[0],s)
Dies ist, wie ich die Anzahl der Stunden erhalten, die zwischen zwei datetime.datetime Objekten verstrichene:
before = datetime.datetime.now()
after = datetime.datetime.now()
hours = math.floor(((after - before).seconds) / 3600)
Um nur die Anzahl der Tage: Timedelta hat ein ‚Tag‘ Attribut. Sie können einfach Abfrage des.
>>>from datetime import datetime, timedelta
>>>d1 = datetime(2015, 9, 12, 13, 9, 45)
>>>d2 = datetime(2015, 8, 29, 21, 10, 12)
>>>d3 = d1- d2
>>>print d3
13 days, 15:59:33
>>>print d3.days
13
dachte einfach es nützlich sein könnte, die Formatierung als auch in Bezug auf die Timedelta zu erwähnen. strptime () analysiert eine Zeichenfolge, die eine Zeit entsprechend einem Format darstellt.
from datetime import datetime
datetimeFormat = '%Y/%m/%d %H:%M:%S.%f'
time1 = '2016/03/16 10:01:28.585'
time2 = '2016/03/16 09:56:28.067'
time_dif = datetime.strptime(time1, datetimeFormat) - datetime.strptime(time2,datetimeFormat)
print(time_dif)
Dies wird ausgegeben: 0: 05: 00,518000
Ich benutze so etwas wie diese:
from datetime import datetime
def check_time_difference(t1: datetime, t2: datetime):
t1_date = datetime(
t1.year,
t1.month,
t1.day,
t1.hour,
t1.minute,
t1.second)
t2_date = datetime(
t2.year,
t2.month,
t2.day,
t2.hour,
t2.minute,
t2.second)
t_elapsed = t1_date - t2_date
return t_elapsed
# usage
f = "%Y-%m-%d %H:%M:%S+01:00"
t1 = datetime.strptime("2018-03-07 22:56:57+01:00", f)
t2 = datetime.strptime("2018-03-07 22:48:05+01:00", f)
elapsed_time = check_time_difference(t1, t2)
print(elapsed_time)
#return : 0:08:52
Das ist der Unterschied zwischen der aktuellen Zeit und 9.30 zu finden
t=datetime.now()-datetime.now().replace(hour=9,minute=30)
Das ist mein Ansatz Mktime .
from datetime import datetime, timedelta
from time import mktime
yesterday = datetime.now() - timedelta(days=1)
today = datetime.now()
difference_in_seconds = abs(mktime(yesterday.timetuple()) - mktime(today.timetuple()))
difference_in_minutes = difference_in_seconds / 60
Weitere Möglichkeiten Unterschied zwischen Datum zu erhalten;
import dateutil.parser
import datetime
last_sent_date = "" # date string
timeDifference = current_date - dateutil.parser.parse(last_sent_date)
time_difference_in_minutes = (int(timeDifference.days) * 24 * 60) + int((timeDifference.seconds) / 60)
So Ausgang in Min erhalten.
Danke