python - 如何检查午夜是否刚刚过去?
问题描述
我需要一个函数返回一个布尔值,指示午夜是否刚刚过去。我想出了这个,但我对“形式”不满意。有人能想到更好的吗?在效率/优雅方面?
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)
解决方案
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()
推荐阅读
- javascript - React - 组件在滚动时未正确更新
- python - 使用python在大型数据集中查找重复项
- docker - 将环境变量传递给容器不起作用
- python - 如何让 Praw Script 同时观看多个流
- neo4j - Neo4J 架构约束验证失败
- android - 即使没有释放相机,相机 takePicture() 也不会调用 onPictureTaken() 回调
- git - git repo 从 WSL 提供的信息比从 Windows 提供的信息相互矛盾
- jquery - Safari 中的 CSS 动画滞后
- javascript - 从 3 个输入中获取并同时替换
- spring-webflux - 是否使用 Spring 数据 Cassandra Reactive