2016-04-03 15 views
1

Ayrıntı kullanarak bir datetime nesnesine dönüştürdüğüm bir dizem var.datetime nesnesinden datetime.datetime.now() çıkartılıyor

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

O zamandan beri geçen süreyi bulmak istiyorum. datetime.datetime.now() kullanmayı denedim ve ikisini çıkardım, ancak bunlar farklı formattaydı ve bir hata atıyordu.

Bunu yapmanın en iyi yolu nedir?

+0

related: [Find 24 saat tarihsaat arasında geçtiyse - Python] (http://stackoverflow.com/q/26313520/4279) – jfs

cevap

6

ondan timezone aware datetime nesnesi ve substract date_object olun: Bir zaman dilimi farkında datetime nesnesi varsa

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

not: Herhangi bir zaman dilimini '.now()', örneğin 'now = datetime.now (pytz.utc)' olarak iletebilirsiniz - sonucu değiştirmez. – jfs

1

o zaman UTC dönüştürmek olabilir kolayca geçen süreyi bulmak için:

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


Yalnızca stdlib kullanarak geçen süre zaman dizesini ayrıştırmak ve alabilir:

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