2013-04-23 38 views
6

Mam RTFM i przeczytać wiele pytań i odpowiedzi tutaj na SO w związku z tym, iz radością korzystałem wczoraj z strftime i strptime, więc przysięgam, że to powinno działać, ale to nie jest .. ..Integer różnica w python między dwiema datami

Po prostu chcę liczbę całkowitą. Nie "obiekt timedelta". Nie jest to "świadomy, ale możliwy do zaszantowania obiekt" (patrz: I RTFM). Nie krotka. Nie słownik. Prosta, szalejąca liczba całkowita, więc mogę użyć instrukcji if i gałęzi i być szczęśliwym. Proszę, przynieś światło swojej mądrości, dzięki.

Oto co mam

... 
import datetime 
mdate = "2010-10-05" 
rdate = "2010-10-05" 
mdate1 = datetime.strptime(mdate, "%Y-%m-%d") 
rdate1 = datetime.strptime(rdate, "%Y-%m-%d") 
delta = datetime.timedelta.days(mdate1 - rdate1) 

Oto co mam:

pmain.py:4: AttributeError: 'module' object has no attribute 'strptime' 
(error hits in the 'mdate1..." line above) 

A, to nie znaczy, że moja linia delta będzie działać - proszę spojrzeć na ten jeden, także.

+5

'datetime.datetime.strptime' – jamylak

+0

Częściowa kredytowej. Kolejne trafienia błędu dla linii delta: pmain.py:6: TypeError: obiekt 'member_descriptor' nie jest możliwy do wywołania –

Odpowiedz

19

Chcesz uzyskać classmethoddatetime.datetime.strptime(), a następnie podjąć .daysatrybut z powstałego timedelta:

import datetime 

mdate = "2010-10-05" 
rdate = "2010-10-05" 
mdate1 = datetime.datetime.strptime(mdate, "%Y-%m-%d").date() 
rdate1 = datetime.datetime.strptime(rdate, "%Y-%m-%d").date() 
delta = (mdate1 - rdate1).days 

więc masz moduł datetime, która ma datetime.datetime klasy, co z kolei na nim jest metoda datetime.datetime.strptime(). Dodałem również wywołania do .date(), aby wyodrębnić po prostu część daty (wynik to instancja datetime.date); dzięki temu łatwiej jest radzić sobie z sygnaturami czasowymi, które różnią się nieco mniej niż wielokrotność 24 godzin.

Demo:

>>> import datetime 
>>> mdate = "2010-10-05" 
>>> rdate = "2010-10-05" 
>>> mdate1 = datetime.datetime.strptime(mdate, "%Y-%m-%d").date() 
>>> rdate1 = datetime.datetime.strptime(rdate, "%Y-%m-%d").date() 
>>> delta = (mdate1 - rdate1).days 
>>> print delta 
0 
>>> type(delta) 
<type 'int'> 
+1

Perfet, Martijn - i jak zawsze odpowiadasz i wyjaśniasz i przynosisz korzyści przyszłym programistom z twoimi odpowiedziami. Szczęśliwy szczęśliwy kod teraz - wielkie dzięki! –

+0

Może być lepiej, aby również sprawdzić sekundy, w przypadku gdy OP chce zaokrąglić do najbliższego całego dnia. – Aya

+0

Czy typ zmiennej "delta" i "int"? – George

Powiązane problemy