【发布时间】:2024-04-23 12:20:01
【问题描述】:
我有一个字符串,我使用 parse 将其转换为日期时间对象。
time = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)'
date_object = parse(time)
我想找出从那时起经过的时间。我尝试使用datetime.datetime.now() 并将两者相减,但它们的格式不同并且会引发错误。
最好的方法是什么?
【问题讨论】:
我有一个字符串,我使用 parse 将其转换为日期时间对象。
time = 'Tue, 30 Sep 2014 16:19:08 -0700 (PDT)'
date_object = parse(time)
我想找出从那时起经过的时间。我尝试使用datetime.datetime.now() 并将两者相减,但它们的格式不同并且会引发错误。
最好的方法是什么?
【问题讨论】:
制作 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)
【讨论】:
.now(),例如now = datetime.now(pytz.utc)——它不会改变结果。
如果您有一个可识别时区的日期时间对象,那么您可以将其转换为 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
【讨论】: