我正在尝试将datetime
对象更改为给定时间的最近一次出现。因此,例如,如果datetime对象为datetime(2018,9,12,15,0,0)
,而我想转到time(12,0)
,则结果应为datetime(2018,9,12,12,0,0)
。但是,如果我想去time(20,0)
,那么结果应该是datetime(2018,9,11,20,0,0)
。
我能想到的最好的方法是(假装几秒钟和几毫秒无关紧要):
def adjust(datetime_obj, time_obj):
if datetime_obj.time() < time_obj:
datetime_obj -= relativedelta(days=1)
datetime_obj -= relativedelta(hour=time_obj.hour, minute=time_obj.minute)
有没有可以为我处理此操作的库?这似乎是一件相对简单的事情,也是一个相对普通的用例。我惊讶地发现datetime.timedelta
和dateutil.relativedelta
都无法做到这一点。
为了进一步说明这一点,我还想说一种“去最近的星期三12:00”。因此,如果今天是星期三10:00,它将回滚一周,但是如果今天是星期三13:00,它将回滚一个小时。