2012-04-07 17 views
0

ich bin subtrahieren zwei Daten und die Berechnung der Differenz in StundenPython vergleichen zwei Daten

c_date = "2011-03-23 12:52:14" 
c_obj_date = datetime.datetime.strptime(c_date, "%Y-%m-%d %H:%M:%S") 
n_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 
print "Creation Date:", c_date 
print "Current Date: ", n_date 
hours = abs(n_date - c_obj_date).total_seconds()/3600.0 
print hours 

aber das gibt mir diese Fehlermeldung:

File "./eight.py", line 69, in zabbix_result 
    hours = abs(n_date - c_obj_date).total_seconds()/3600.0 
TypeError: unsupported operand type(s) for -: 'str' and 'datetime.datetime' 

i python2.4

UPDATE bin mit :

ich benutze jetzt

n_date = datetime.datetime.now() 

aber die total_seconds() funktioniert nicht in Python2.4 ?? Irgendeine Idee, wie ich zwei Datetime-Objekte subtrahieren und den Stundenunterschied bekommen kann?

+0

siehe meine Antwort unten ... – thebjorn

Antwort

1

n_date ist eine Zeichenfolge und c_obj_date ist ein datetime.datetime-Objekt. Ich bin nicht sicher, wo Sie die Methode .total_seconds() von beiden bekommen (es ist kein Mitglied von timedelta ...). so etwas wie dies versucht:

 
c_date = "2011-03-23 12:52:14" 
c_obj_date = datetime.datetime.strptime(c_date, "%Y-%m-%d %H:%M:%S") 
n_date = datetime.datetime.now() 

print "Creation Date:", c_date 
print "Current Date: ", n_date 

absdiff = abs(n_date - c_obj_date) 
hours = (absdiff.days * 24 * 60 * 60 + absdiff.seconds)/3600.0 

print hours 
+1

total_seconds wurde in Python 2 eingeführt.7: http://docs.python.org/library/datetime.html#datetime.timedelta.total_seconds –

+0

cool das hat funktioniert! – krisdigitx

2

Schauen Sie sich die Fehlermeldung an. Der Typ auf der linken Seite des Operanden ist str. Das Problem ist in der dritten Zeile. Versuchen Sie, den strftime Teil zu entfernen.

1

Der Typ n_date ist ein String. Der Typ c_obj_date ist ein Datetime-Wert, dh Sie können nicht voneinander subtrahieren. Das sagt auch die Fehlermeldung.

Sie wollten wahrscheinlich Folgendes tun: datetime.datetime.now() - c_obj_date. Sie haben jetzt eine timedelta und Sie können die Anzahl der Sekunden mit der folgenden Methode erhalten.

Die total_seconds() Methode wurde in Python 2.7 eingeführt und Sie verwenden Python 2.4, so dass das nicht funktioniert. Wenn Sie es in Python 2.4 tun möchten, einfach die Methode der Berechnung in der Dokumentation folgen:

(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6)/10**6 

wo td-datetime.datetime.now() - c_obj_date gleich ist.

+0

ja richtig ... keine Ahnung, wie es zu tun in python2.4 – krisdigitx

+0

Ich habe eine Art und Weise hinzugefügt, um die Anzahl der Sekunden auf meine Antwort zu berechnen . –

1

Sie müssen mit dem Datetime-Objekt arbeiten.

Ändern Sie diese Zeile:

n_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 

mit:

n_obj_date = datetime.datetime.now() 

Und passen Sie die folgenden diejenigen zu:

print "Creation Date:", c_date 
print "Current Date: ", n_obj_date.strftime("%Y-%m-%d %H:%M:%S") 
hours = abs(n_obj_date - c_obj_date).total_seconds()/3600.0 
print hours 

diese Weise werden Sie eine Subtraktion zwischen zwei Datetime tun Objekte.

1

strftime konvertiert ein timey-Objekt in eine Zeichenfolge, strptime analysiert eine Zeichenfolge in ein timey-Objekt.

also n_date ist eine Zeichenfolge.