2016-04-03 18 views
1

Ich habe eine Zeichenfolge, die ich mithilfe von Parse in ein Datetime-Objekt konvertiert habe.Subtrahieren von datetime.datetime.now() von einem Datetime-Objekt

time = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)' 
date_object = parse(time) 

Ich möchte die Zeit finden, die seitdem verstrichen ist. Ich versuchte mit datetime.datetime.now() und subtrahieren die beiden, aber sie sind ein anderes Format und warfen einen Fehler.

Was ist der beste Weg, dies zu tun?

+0

bezogen werden: [Finden Sie, wenn 24 Stunden zwischen Datetimes bestanden haben - Python] (http://stackoverflow.com/q/26313520/4279) – jfs

Antwort

6

Machen Sie das timezone aware Datetime-Objekt und subtrahieren date_object von ihm:

>>> from dateutil.parser import parse 
>>> time = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)' 
>>> date_object = parse(time) 
>>> 
>>> from datetime import datetime 
>>> import pytz 
>>> now = datetime.now(pytz.timezone('US/Pacific')) 
>>> now - date_object 
datetime.timedelta(550, 84210, 337036) 
+0

Hinweis: Sie können eine beliebige Zeitzone an '.now() 'übergeben, zB' now = datetime.now (pytz.utc) '- das Ergebnis wird nicht geändert. – jfs

1

Wenn Sie eine Zeitzone-aware Datetime-Objekt haben, dann Sie es UTC umwandeln konnte, leicht die verstrichene Zeit zu finden:

from datetime import datetime 

# <utc time> = <local time> - <utc offset> 
then_utc = date_object.replace(tzinfo=None) - date_object.utcoffset() 
now = datetime.utcnow() 
elapsed = now - then_utc 

The explanation of why you should not use datetime.now() to get the elapsed time see in here.


Sie könnten die Zeit-String analysieren und erhalten die verstrichene Zeit nur stdlib mit:

>>> time_string = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)' 
>>> from email.utils import parsedate_tz, mktime_tz 
>>> then = mktime_tz(parsedate_tz(time_string)) 
>>> import time 
>>> now = time.time() 
>>> elapsed_seconds = now - then 
Verwandte Themen