为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查午夜是否刚刚过去?

如何检查午夜是否刚刚过去?

catspeake 2023-12-26 16:03:47
我需要一个返回布尔值的函数,指示午夜是否刚刚过去。我想出了这个,但我对“形式”不满意。有人能想到更好的办法吗?就效率/优雅而言?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)
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

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


查看完整回答
反对 回复 2023-12-26
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

您可能误解了如何声明函数以及如何调用它。这是修复函数调用问题的版本:


from datetime import datetime, timedelta


def passed_midnight(delta=1):

    today = datetime.today()

    time_ago = today - timedelta(minutes=delta)

    return today.strftime("%Y%m%d") != time_ago.strftime("%Y%m%d")


>>> print(passed_midnight(10))

False

请注意,此代码不考虑时区。不同位置的行为会有所不同


查看完整回答
反对 回复 2023-12-26
  • 2 回答
  • 0 关注
  • 51 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信