2013-04-23 19 views
6

Ich habe RTFM und lesen Sie viele Fragen und Antworten hier auf SO diesbezüglich, und war glücklich mit strftime und strptime gestern, so würde ich schwören, dass dies funktionieren sollte, aber es ist nicht .. ..Integer Unterschied in Python zwischen zwei Daten

Ich möchte nur eine ganze Zahl. Kein "Timedelta-Objekt". Kein "bewusstes, aber hashbares Objekt" (siehe I RTFM). Kein Tupel. Kein Wörterbuch. Nur eine einfache verdammte Ganzzahl, so dass ich eine if-Anweisung verwenden und verzweigen und glücklich sein kann. Bitte bring das Licht deiner Weisheit darauf, mit Dank.

Hier ist, was ich

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

Hier ist, was ich bekommen:

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

Und das nicht, dass meine Delta bedeutet Linie funktionieren wird - an diesem einen schauen Sie sich bitte, auch.

+5

'datetime.datetime.strptime' – jamylak

+0

Teil Kredit. Nächster Fehler trifft auf Deltazeile: pmain.py:6: TypeError: Objekt 'member_descriptor' kann nicht aufgerufen werden –

Antwort

19

Sie wollen den Classdatetime.datetime.strptime() zu bekommen, dann nehmen Sie das .daysAttribut aus dem resultierenden 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 

So haben Sie das datetime-Modul, das eine datetime.datetime Klasse hat, was wiederum eine datetime.datetime.strptime() Methode darauf. Ich fügte auch Anrufe zu .date() hinzu, um nur den Datumsteil zu extrahieren (Ergebnis ist eine datetime.date Instanz); Dies macht den Umgang mit Zeitstempeln, die geringfügig weniger als ein Vielfaches von 24 Stunden abweichen, einfacher.

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 - und wie immer antwortest und erklärst du und profitierst zukünftigen Codierern mit deinen Antworten. Happy happy code jetzt - vielen dank! –

+0

Es könnte besser sein, auch Sekunden zu überprüfen, falls das OP auf den nächsten ganzen Tag runden möchte. – Aya

+0

Ist der Typ der Variablen "Delta" ein "Int"? – George

Verwandte Themen