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

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


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)


catspeake
浏览 118回答 2
2回答

浮云间

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

吃鸡游戏

您可能误解了如何声明函数以及如何调用它。这是修复函数调用问题的版本:from datetime import datetime, timedeltadef 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请注意,此代码不考虑时区。不同位置的行为会有所不同
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python