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

Posted

技术标签:

【中文标题】在 Python 中确定两个日期之间的秒数【英文标题】:Determine seconds between two dates in Python 【发布时间】:2016-05-22 16:15:02 【问题描述】:

我正在调用 Office 365 日历 API 并以以下格式接收活动的开始日期:

2016-05-20T08:00:00Z

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

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

【问题讨论】:

将当前日期时间转换为纪元并将您的日期时间转换为纪元,然后执行事件纪元 - 当前纪元并检查它是否小于 60 * 5 。现在我不知道 python 的适当语法,这就是我写评论的原因,但这是基本思想。 【参考方案1】:

这是仅限 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.

【讨论】:

【参考方案2】:

您获得的时间需要转换为日期时间格式 -

>>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,因此绝对差异将为您提供秒数。 给定的 UTC 时间 (Z) 可以仅使用 stdlib 解析,如 @tschale's answer 所示。 @J.F.Sebastian 很好。但我想使用它是因为对 pytz 等库的依赖较少。在这个用户的情况下做tzinfo=None,因为他的时区总是UTC【参考方案3】:

在 python 中有datetime 模块。您可以使用pytz 获取特定于时区的now-time。但是,如果可以的话,您应该使用 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

【讨论】:

这很好,但由于夏令时,时间是一个小时。我该如何解决谢谢? 刚刚发现pytz。有了它,您可以获得特定时区的日期时间:import pytzberlin = pytz.timezone('Europe/Berlin')time_now = datetime.now(berlin)。这对你有帮助吗? @user2823030:Z 表示 UTC 时间。要查找给定时间是否在 5 分钟内(假设时钟同步):abs(formatted_time - datetime.utcnow()) &lt; timedelta(minutes=5)(类似于@minocha's answer)。见Find if 24 hrs have passed between datetimes - Python

以上是关于在 Python 中确定两个日期之间的秒数的主要内容,如果未能解决你的问题,请参考以下文章

java怎样计算两个日期之间的秒数

两个日期之间按小时分组的秒数

C/C++输入两个任意日期求相隔天数

iOS开发:计算两个事件之间经过的秒数的简单方法是啥?

c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140324150000

8.05 确定两个日期之间的秒分小时数