将日期扩展到当天的开始和结束日期时间

Com*_*cus 2 python datetime

根据当前时间 ( datetime.now()),我想将其扩展到涵盖一整天的时间。

现在我一直在使用:

start = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')
end = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

问题是这是从当前日期算起的 24 小时。如果是中午 12 点,这意味着它应该只回顾 12 小时,因为我想搜索当天的记录。

如何在 Python 中完成此操作?

Hal*_*gen 9

这是另一种直接重置时间的解决方案 - 不需要数学。使用datetime.replace():

now = datetime.now()
day_start = now.replace(hour=0, minute=0, second=0, microsecond=0)
day_end = day_start + timedelta(hours=24)
Run Code Online (Sandbox Code Playgroud)

  • 像这样使用“datetime.replace()”的优点之一是它保留了时区信息。 (2认同)

fiv*_*lor 5

我希望这是有道理的,我只是给出了非常描述性的变量名称

from datetime import datetime
from datetime import timedelta

now = datetime.now()
start_of_day = datetime(now.year,now.month,now.day)
delta_since_start_of_day = now - start_of_day
delta_till_end_of_day = timedelta(days=1) - delta_since_start_of_day
end_of_day = start_of_day + timedelta(days=1)
Run Code Online (Sandbox Code Playgroud)


ceg*_*gas 5

看来你可以像这样完成你的愿望:

from datetime import datetime, time

now = datetime.now()
start = datetime.combine(now, time.min)  # datetime.datetime(2021, 11, 5, 0, 0)
end = datetime.combine(now, time.max)  # datetime.datetime(2021, 11, 5, 23, 59, 59, 999999)
Run Code Online (Sandbox Code Playgroud)

不需要数学、替换、时间增量。