首页 > 解决方案 > 如何检查午夜是否刚刚过去?

问题描述

我需要一个函数返回一个布尔值,指示午夜是否刚刚过去。我想出了这个,但我对“形式”不满意。有人能想到更好的吗?在效率/优雅方面?

from datetime import datetime, timedelta
   
def passed_midnight(delta=1):
    time_now = datetime.today   # see other comment below
    time_ago = time_now() - timedelta(minutes=delta)
    # next line with a dummy delta (zero) cuz "datetime.today - timedelta(days=1)" gives an error
    today = time_now() - timedelta(days=0)
    return today.strftime("%Y%m%d") != time_ago.strftime("%Y%m%d")

>>> print(passed_midnight, 10)

标签: pythonpython-3.xraspberry-pi4

解决方案


  • datetime.today - timedelta(days=1)给出一个错误,因为datetime.today是一个需要调用的函数。这就是为什么你一定觉得有必要time_now()用括号写:它调用函数两次(结果不同,因为时间有流逝的趋势)。
  • 避免strftime支持date(),它仅返回日期部分(作为datetime.date对象)。
  • 使用datetime.now()而不是datetime.today()这样减去 atimedelta可以考虑时区(以及夏令时转换)。

那么你得到这个:

from datetime import datetime, timedelta
   
def passed_midnight(delta=1):
    time_now = datetime.now()
    time_ago = time_now - timedelta(minutes=delta)
    return time_now.date() != time_ago.date()

推荐阅读