Jak sprawdzić różnicę, w sekundach, między dwoma datami?

Musi być na to łatwiejszy sposób. Mam obiekty, które chcą być odświeżane co jakiś czas, więc chcę nagrać, kiedy zostały utworzone, sprawdzić pod bieżącym znacznikiem czasu i odświeżyć w razie potrzeby.

Datetime.datetime okazał się trudny i nie chcę zanurzać się w bibliotece ctime. Czy jest coś łatwiejszego do tego typu rzeczy?

Author: Kara, 2010-12-06

4 answers

Jeśli chcesz obliczyć różnice między dwoma znanymi datami, użyj total_seconds w następujący sposób:

import datetime as dt

a = dt.datetime(2013,12,30,23,59,59)
b = dt.datetime(2013,12,31,23,59,59)

(b-a).total_seconds()

86400.0

#note that seconds doesn't give you what you want:
(b-a).seconds

0

 339
Author: Rich Signell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 12:35:26
import time  
current = time.time()

...job...
end = time.time()
diff = end - current
Czy to by Ci pasowało?
 26
Author: matcheek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-06 01:34:18
>>> from datetime import datetime

>>>  a = datetime.now()

# wait a bit 
>>> b = datetime.now()

>>> d = b - a # yields a timedelta object
>>> d.seconds
7

(7 będzie ile czasu czekałeś trochę wyżej)

Znajduję datetime.datetime jest dość przydatny, więc jeśli napotkałeś skomplikowany lub niezręczny scenariusz, daj nam znać.

EDIT: podziękowania dla @ WoLpH za zwrócenie uwagi, że nie zawsze chcemy odświeżać się tak często, że daty będą blisko siebie. Biorąc pod uwagę dni w delcie, możesz obsłużyć dłuższe rozbieżności znaczników czasu:

>>> a = datetime(2010, 12, 5)
>>> b = datetime(2010, 12, 7)
>>> d = b - a
>>> d.seconds
0
>>> d.days
2
>>> d.seconds + d.days * 86400
172800
 14
Author: Jarret Hardie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-06 01:59:05

Mamy funkcję total_seconds () z Pythonem 2.7 Proszę zobaczyć poniższy kod dla Pythona 2.6

import datetime
import time  

def diffdates(d1, d2):
    #Date format: %Y-%m-%d %H:%M:%S
    return (time.mktime(time.strptime(d2,"%Y-%m-%d %H:%M:%S")) -
               time.mktime(time.strptime(d1, "%Y-%m-%d %H:%M:%S")))

d1 = datetime.now()
d2 = datetime.now() + timedelta(days=1)
diff = diffdates(d1, d2)
 9
Author: Prashant Gaur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-09 23:01:10