从datetime对象中减去datetime.datetime.now()

时间:2016-04-03 22:40:07

标签: python datetime

我有一个字符串,我已经使用解析转换为日期时间对象。

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

我想找到从那时起已经过去的时间。我尝试使用datetime.datetime.now()并减去两者,但它们的格式不同,并且引发了错误。

这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:6)

制作 timezone aware 日期时间对象并从中减去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) 

答案 1 :(得分:1)

如果你有一个时区感知日期时间对象,那么你可以将它转换为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解析时间字符串并获取已用时间:

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