我试图找到发生特定时间的NEXT日期时间。
例如:
now = datetime.datetime.now() # April 5th, 1 PM
desired_time = '14:00:00' # 2 PM
next_datetime_occurance = get_next_datetime(now, desired_time) # Returns April 5th, 2PM
now = datetime.datetime.now() # April 5th, 3 PM
desired_time = '14:00:00' # 2 PM
next_datetime_occurance = get_next_datetime(now, desired_time) # Returns April 6th, 2PM
我将如何干净地做到这一点?(假设一切都在UTC中)
您可以使用datetime.replace()
一些日期时间算法:
import datetime as dt
def next_datetime(current: dt.datetime, hour: int, **kwargs) -> dt.datetime:
repl = current.replace(hour=hour, **kwargs)
while repl <= current:
repl = repl + dt.timedelta(days=1)
return repl
演示:
>>> now = dt.datetime.utcnow()
>>> now
datetime.datetime(2020, 5, 7, 20, 17, 21, 581402)
>>> next_datetime(now, hour=19)
datetime.datetime(2020, 5, 8, 19, 17, 21, 581402)
>>> next_datetime(now, hour=21)
datetime.datetime(2020, 5, 7, 21, 17, 21, 581402)
>>> next_datetime(now, hour=20, minute=12)
datetime.datetime(2020, 5, 8, 20, 12, 21, 581402)
>>> next_datetime(now, hour=20, minute=50)
datetime.datetime(2020, 5, 7, 20, 50, 21, 581402)
此处**kwargs
设计采用的datetime()
解析器参数的解析度比hour
分钟,秒和微秒的解析度要高。您可能需要对此进行一些验证,因为year
对于这个问题,通过类似的东西是没有意义的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句