Python中计算两个日期之间的秒数

3

我正在调用Office 365日历API,并以以下格式收到事件的开始日期:

2016-05-20T08:00:00Z

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

最好的方法是确定上述日期/时间格式中我的事件与当前时间之间的秒数(考虑夏令时的UTC时间)。


将当前日期时间转换为纪元时间,并将您的事件日期时间转换为纪元时间,然后计算事件纪元减去当前纪元,并检查是否小于60 * 5。现在我不知道Python的适当语法,所以我写了一个注释,但这是基本思路。 - Maantje
3个回答

4
这里是仅使用标准库的解决方案(结合了@tschale@minocha的答案):
#!/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小时


3
您需要将获取的时间转换为日期时间格式 -
>>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中。

希望这能解决问题。


@user2823030提到的datetime.datetime.utcnow()也考虑了夏令时。而且由于您检索的时间和此时间都是utc时间,绝对差异将给出秒数。 - minocha
1
给定的 UTC 时间(Z)可以像 @tschale 的回答 中所示,仅使用标准库进行解析。 - jfs
@J.F.Sebastian 这很好。但我想使用它是因为它不依赖于像pytz这样的库。在这个用户的情况下,使用 tzinfo=None 就可以了,因为他的时区始终是UTC。 - minocha

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

datetime.strptimeformat参数是通过datetime.strftime指定的。


这个代码运行良好,但由于夏令时的缘故,时间相差一个小时。请问我该如何解决呢?谢谢。 - user2823030
刚刚发现了 pytz。使用它,您可以获取特定于时区的日期时间:import pytzberlin = pytz.timezone('Europe/Berlin')time_now = datetime.now(berlin)。这对您有帮助吗? - tschale
@user2823030:Z 表示 UTC 时间。为了判断给定时间是否在 5 分钟内(假设时钟同步):abs(formatted_time - datetime.utcnow()) < timedelta(minutes=5)(类似于 @minocha's answer)。参见 Find if 24 hrs have passed between datetimes - Python - jfs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接