我正在调用Office 365日历API,并以以下格式收到事件的开始日期:
2016-05-20T08:00:00Z
我想检查何时接近事件,例如5分钟时间,并使用以下解决方案之一: [Python - Do (something) when event is near
最好的方法是确定上述日期/时间格式中我的事件与当前时间之间的秒数(考虑夏令时的UTC时间)。
我正在调用Office 365日历API,并以以下格式收到事件的开始日期:
2016-05-20T08:00:00Z
我想检查何时接近事件,例如5分钟时间,并使用以下解决方案之一: [Python - Do (something) when event is near
最好的方法是确定上述日期/时间格式中我的事件与当前时间之间的秒数(考虑夏令时的UTC时间)。
#!/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"
相关文章:如何判断两个日期之间是否相差24小时。
>>import datetime
>>import iso8601
>>datetime_variable = iso8601.parse_date('2016-05-20T08:00:00Z')
>>(datetime.replace(tzinfo=None) - datetime.datetime.utcnow()).seconds
>>56086
如果响应始终包含时区为“Z”的话,你可以这样做,它对应于UTC。由于常规的datetime.datetime对象是无时区的,所以你也必须剥离另一个对象的tzinfo,但这不应该是个问题,因为两者都在UTC中。
希望这能解决问题。
tzinfo=None
就可以了,因为他的时区始终是UTC。 - minochadatetime
模块。您可以使用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()
datetime.strptime
的format
参数是通过datetime.strftime指定的。
pytz
。使用它,您可以获取特定于时区的日期时间:import pytz
,berlin = pytz.timezone('Europe/Berlin')
,time_now = datetime.now(berlin)
。这对您有帮助吗? - tschaleZ
表示 UTC 时间。为了判断给定时间是否在 5 分钟内(假设时钟同步):abs(formatted_time - datetime.utcnow()) < timedelta(minutes=5)
(类似于 @minocha's answer)。参见 Find if 24 hrs have passed between datetimes - Python。 - jfs