确定Python中两个日期之间的秒数

时间:2016-05-22 16:15:03

标签: python date time seconds

我正在调用Office 365 Calendar API并以下列格式接收事件的开始日期:

2016-05-20T08:00:00Z

我想查看事件何时接近,例如5分钟的时间,并使用以下解决方案的内容: [Python - Do (something) when event is near

确定上述日期/时间格式的事件与现在当前时间之间的秒数的最佳方式是什么(以UTC考虑夏令时)?

3 个答案:

答案 0 :(得分:4)

以下是仅限stdlib的解决方案(@tschale's @minocha's答案的组合):

#!/usr/bin/env python
from datetime import datetime, timedelta

then = datetime.strptime('2016-05-20T08:00:00Z', '%Y-%m-%dT%H:%M:%SZ')
now = datetime.utcnow()
if abs(now - then) < timedelta(minutes=5):
    "within 5 minutes"

相关:Find if 24 hrs have passed between datetimes

答案 1 :(得分:3)

你得到的时间需要适应日期时间格式 -

>>import datetime
>>import iso8601
>>datetime_variable = iso8601.parse_date('2016-05-20T08:00:00Z')
>>(datetime.replace(tzinfo=None) - datetime.datetime.utcnow()).seconds
>>56086

如果响应始终包含时区,则可以执行此操作:&#39; Z&#39;转换为UTC。由于正常的datetime.datetime对象是时区,你必须剥离tzinfo的另一个对象,但这不应该是一个问题,因为它们都是UTC。

希望这有效

答案 2 :(得分:1)

在python中有datetime模块。您可以使用pytz获取特定时区now - 时间。但是,如果可以,您应该使用UTC时间并仅将其转换为当地时间,以便人类可以读取输出。

from datetime import datetime
import pytz
time = '2016-05-20T08:00:00Z'
formatted_time = datetime.strptime(time, '%Y-%m-%dT%H:%M:%SZ')
tz = pytz.timezone('Europe/Berlin')
time_now = datetime.now(tz)
time_delta = formatted_time - time_now()
delta_in_seconds = time_delta.total_seconds()

format的{​​{1}}参数已指定为datetime.strftime