web-dev-qa-db-ger.com

Wie finde ich den Zeitunterschied zwischen zwei datetime-Objekten in Python?

Wie kann ich den Zeitunterschied in Minuten zwischen zwei datetime-Objekten feststellen?

236
Hobhouse
>>> 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
267
SilentGhost

Neu bei Python 2.7 ist die Instanzmethode timedelta.total_seconds(). In den Python-Dokumenten entspricht dies (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
126
Ryan Stanley

Ziehen Sie einfach eine von der anderen ab. 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 in Minuten umrechnen.

25
Vinay Sajip

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

Dauer in Jahren

>>> years = divmod(duration_in_s, 31556926)[0]    # Seconds in a year=31556926.

Dauer 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 Terminen

>>> 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)
21
Attaque

Wenn a, b datetime-Objekte sind, dann finden Sie in Python 3 den Zeitunterschied zwischen ihnen:

from datetime import timedelta

time_difference = a - b
time_difference_in_minutes = time_difference / timedelta(minutes=1)

Bei früheren Python-Versionen:

time_difference_in_minutes = time_difference.total_seconds() / 60

Wenn a, b naive Datetime-Objekte sind, wie z. B. von datetime.now() zurückgegeben, kann das Ergebnis falsch sein, wenn die Objekte Ortszeit mit unterschiedlichen UTC-Offsets darstellen, z. Weitere Details: Finden Sie heraus, ob zwischen den Datumsangaben 24 Stunden vergangen sind - Python .

Um zuverlässige Ergebnisse zu erhalten, verwenden Sie UTC-Zeit- oder Zeitzonenobjekte.

19
jfs

Verwenden Sie 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)
17
tgwaste

So erhalte ich die Anzahl der Stunden, die zwischen zwei datetime.datetime-Objekten vergangen sind:

before = datetime.datetime.now()
after  = datetime.datetime.now()
hours  = math.floor(((after - before).seconds) / 3600)
7
Tony

Um nur die Anzahl der Tage zu finden: timedelta hat ein Attribut 'Tage'. Sie können das einfach abfragen.

>>>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
6
griknus17

Ich benutze so etwas:

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
2
Softmixt

Ich denke nur, dass es nützlich sein könnte, auch die Formatierung in Bezug auf das Timedelta zu erwähnen. strptime () parst eine Zeichenfolge, die eine Zeit gemäß einem Format darstellt.

import datetime
from datetime import timedelta

datetimeFormat = '%Y/%m/%d %H:%M:%S.%f'    
time1 = '2016/03/16 10:01:28.585'
time2 = '2016/03/16 09:56:28.067'  
timedelta = datetime.datetime.strptime(time1, datetimeFormat) - datetime.datetime.strptime(time2,datetimeFormat)

Dies gibt folgende Ausgabe aus: 0: 05: 00.518000

2
sparrow

hier wird der Unterschied zwischen der aktuellen Uhrzeit und 9.30 Uhr ermittelt

t=datetime.now()-datetime.now().replace(hour=9,minute=30)
1
nidheesh

Auf andere Weise Differenz zwischen Datum 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)

Holen Sie sich also die Ausgabe in Min.

Vielen Dank

0
Anurag Pandey

Dies ist mein Ansatz mit 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
0
Eduardo