我正在调用Office 365 Calendar API并以下列格式接收事件的开始日期:
2016-05-20T08:00:00Z
我想查看事件何时接近,例如5分钟的时间,并使用以下解决方案的内容: [Python - Do (something) when event is near
确定上述日期/时间格式的事件与现在当前时间之间的秒数的最佳方式是什么(以UTC考虑夏令时)?
答案 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"
答案 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