如何将日期时间添加到第二天时自动翻转
我有一些代码需要量化从文件中读取的日期。例如,设置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)
但是那么如果那一天是这个月的最后一天呢?然后你需要翻到下一个月,等等。
必须有一个更干净的方式来做到这一点。如何处理量化日期,同时考虑到第二天/每月/每年?
而不是使用datetime.replace()
,使用timedelta()
object,添加到您的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)
四舍五入到下一个小时(所以分钟= 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
@Martijn:OP询问如何在11:50到12:00之间轮转。给日期时间添加'timedelta(hours = 1)'是不够的。据推测,OP也希望12点保持12:00。所以我不认为dateutil是矫枉过正的。我们以不同的方式解释这个问题。 – unutbu 2014-09-01 17:13:44
你完全正确;我的错。 – 2014-09-01 17:17:37
退房'datetime':https://docs.python.org/2/library/datetime.html – fuesika 2014-09-01 16:39:20
@pyStarter:通过使用'.replace()'方法来判断OP * already *正在使用'datetime'模块。 – 2014-09-01 16:42:19