我有一些代码需要量化从文件中读取的日期。例如,将11:50设置为12:00以清除数字。我目前使用以下内容执行此操作:
end = end.replace(hour = end.hour + 1, minute = 0)
如果end.hour
是晚上11点,则会遇到问题,因为这将转到第二天。您可以使用像......这样的代码来防止这种情况。
if end.hour == 23:
end = end.replace(day = end.day + 1, hour = 0, minute = 0)
else:
end = end.replace(hour= end.hour + 1, minute=0)
但是如果那一天是这个月的最后一天呢?然后你需要翻到下个月,依此类推。
必须有一种更清洁的方法来做到这一点。如何处理量化日期,同时考虑滚动到下一天/月/年?
答案 0 :(得分:2)
使用timedelta()
object,而不是使用datetime.replace()
,添加到datetime
对象:
end += timedelta(hours=1)
这将照顾您的日期:
>>> from datetime import datetime, timedelta
>>> end = datetime(2014, 9, 1, 22, 45)
>>> end += timedelta(hours=1)
>>> end
datetime.datetime(2014, 9, 1, 23, 45)
>>> end += timedelta(hours=1)
>>> end
datetime.datetime(2014, 9, 2, 0, 45)
这也适用于递增月份和年份,当然:
>>> last_day = datetime(2014, 12, 31, 23, 45)
>>> last_day + timedelta(hours=1)
datetime.datetime(2015, 1, 1, 0, 45)
答案 1 :(得分:1)
要舍入到下一个小时(所以分钟= 0),您可以像这样使用dateutil:
import datetime as DT
import dateutil.rrule as rrule
def next_hour(date):
rr = rrule.rrule(rrule.HOURLY, byminute=[0], dtstart=date, count=1)
return rr.after(date, inc=True)
print(next_hour(DT.datetime(2000,1,31,11,50)))
# 2000-01-31 12:00:00
print(next_hour(DT.datetime(2000,1,31,12,0)))
# 2000-01-31 12:00:00
print(next_hour(DT.datetime(2000,1,31,23,50)))
# 2000-02-01 00:00:00