2016-04-03 4 views
1

私はパースを使ってdatetimeオブジェクトに変換した文字列を持っています。datetime.datetime.now()をdatetimeオブジェクトから外す

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

私はそれ以来経過した時間を見つけたいと思います。私はdatetime.datetime.now()を使って試して2つを減算しましたが、それらは異なったフォーマットであり、エラーを投げていました。

これを行うにはどのような方法が最適ですか?

+0

/q/26313520/4279) – jfs

答えて

6

それからtimezone aware datetimeオブジェクトとsubstract date_objectを行います

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

注:タイムゾーンを '.now()'に 'now = datetime.now(pytz.utc)'のように渡すことができます。 – jfs

1

あなたはタイムゾーンを意識したDateTimeオブジェクトを持っているなら、あなたは簡単に経過時間を見つけるために、UTCに変換できます。

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


あなたは時刻文字列を解析し、のみSTDLIBを使用して、経過時間を得ることができます:[24時間は、日付時刻との間を通過してきた場合の検索 - パイソン](http://stackoverflow.com:関連

>>> 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 
関連する問題