为什么具有正参数的相对增量会返回过去的日期?



我很难理解dateutil.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)

那么,我在这里做错了什么吗?

所以根据你的初始日期,你实际上是早上 8 点,但你使用hour参数来定位早上 6 点,如果你试图增加一小时,你应该分别使用hoursminutes

>>> 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)

我认为它在文档中:

首先,关于weekday

这些实例可能会收到一个参数 N,指定第 N 个工作日,该参数可以是正数或负数(如 MO(+1) 或 MO(-2)。不指定它与指定 +1 相同。

所以通过1,就像你在通过(1, 1)

然后,继续文档,在behavior of operations with relativedelta的第 7 个点:

请注意,例如,如果计算的日期已经是星期一,则使用 (0, 1) 或 (0, -1) 不会更改日期。

所以11月29日已经是星期二了,你要求星期二。

所以什么都没有改变。

相关内容

  • 没有找到相关文章

最新更新