python - 为什么带有正参数的 relativedelta 返回过去的日期?

标签 python python-dateutil relativedelta

我很难理解 dateutil.relativedelta 的行为。 我知道如果我使用 relativedelta doc 中指定的否定参数,relativedelta 可能会返回过去的日期.

但是,当我提供正参数时,我希望它总是返回一个 future 的日期……这似乎是对的吧?

我的用例如下:我们是星期二,现在是 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)

关于python - 为什么带有正参数的 relativedelta 返回过去的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40860505/

相关文章:

python - Django - F ('datetimefield' ) +relativedelta(months=1) 失败

python - 使用 dateutil 将 'month-day' 格式正确转换为 'month-day-year' 格式

python - 选择过去 X 个月的数据

python - 使用 libcurl4 导入 pycurl 会引发 ImportError

python - 我需要更改当前数据框的格式。我应该怎么做?

python-3.x - 检查Python中的日期列是否在最近3个月的范围内

Python:如何检查日期是否不明确?

python - 如何在 Python 中有效地添加稀疏矩阵

python - 在文本文件中搜索字符串,保存包含列表中项目的行,如果文本文件中不存在该项目,则返回 NA