我很难理解dateutil.relativedelta的行为。 我理解,如果我使用relativedelta doc中指定的否定参数,relativedelta可以返回过去的日期。
然而,当我提供正面参数时,我希望它总能在未来返回一个日期......这看起来合法吗?
我的用例如下:我们是星期二,现在是8:35。我想得到最接近的星期一和星期二的日期是6:00。
这就是我的所作所为。第一个结果对我来说似乎是正确的,而第二个结果是错误的。
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2016, 11, 29, 8, 35, 23, 786349)
>>> from dateutil import relativedelta
>>> now.weekday()
1
>>> now + relativedelta.relativedelta(weekday=0, hour=6, minute=0) # should give a time in the future
datetime.datetime(2016, 12, 5, 6, 0, 23, 786349) # here this is correct, in the future
>>> now + relativedelta.relativedelta(weekday=1, hour=6, minute=0) # should give a time in the future
datetime.datetime(2016, 11, 29, 6, 0, 23, 786349) # but this is in the past / I would expect result (2016, 12, 6, 6, 0, 23, 786349)
那么,我在这里做错了吗?
答案 0 :(得分:3)
因此,根据您的初始日期,您实际上是在上午8点,但是您使用hour
参数定位了6AM,如果您尝试增加一小时,那么应分别使用hours
和minutes
>>> now
datetime.datetime(2016, 11, 29, 3, 5, 41, 763818)
>>> now.weekday()
1
>>> now + relativedelta.relativedelta(weekday=1, hour=1)
datetime.datetime(2016, 11, 29, 1, 5, 41, 763818) # Notice how it's in the past
>>> now + relativedelta.relativedelta(weekday=1, hours=1)
datetime.datetime(2016, 11, 29, 4, 5, 41, 763818) # Notice how it's one hour in the future
>>> n + relativedelta.relativedelta(weekday=1, hour=6, minute=0, weeks=1)
datetime.datetime(2016, 12, 6, 6, 0, 41, 763818)
答案 1 :(得分:2)
我认为它在文档中:
从weekday
开始:
这些实例可能会收到一个参数N,指定第N个工作日,可能是正数或负数(如MO(+1)或MO(-2)。未指定它与指定+1相同。
通过传递1
,就像你传递(1, 1)
然后,在behavior of operations with relativedelta
:
请注意,如果计算的日期已经是星期一,例如,使用(0,1)或(0,-1)将不会改变日期。
所以十一月二十九日已经是星期二了,你要求周二。
所以没有任何改变。