【发布时间】:2017-04-23 21:01:51
【问题描述】:
我想在脚本中解析日期,我想知道是否有类似的:
relativedelta(days=1, weekday=MO)
但是几个月?
现在,我提取文本中的月份编号并将其与文档的创建日期(和月份)进行比较。然而,这是相当长且重复的(我必须为将来时、现在时和过去时这样做)......
【问题讨论】:
我想在脚本中解析日期,我想知道是否有类似的:
relativedelta(days=1, weekday=MO)
但是几个月?
现在,我提取文本中的月份编号并将其与文档的创建日期(和月份)进行比较。然而,这是相当长且重复的(我必须为将来时、现在时和过去时这样做)......
【问题讨论】:
将relativedelta(month=2) 添加到datetime 对象将为您提供相同的日期和时间,2 月除外。如果这会创建一个不存在的日期,则该日期将在最后一个存在的日期被截断,例如:
from datetime import datetime
from dateutil.relativedelta import relativedelta
print(datetime(2015, 3, 30) + relativedelta(month=2)) # 2015-02-28 00:00:00
如relativedelta documentation中所述:
年、月、日、时、分、秒、微秒:
绝对信息(参数是单数);添加或减去一个 具有绝对信息的 relativedelta 不执行算术运算 操作,而是替换相应的值 具有 relativedelta 值的原始日期时间。
所有“单数”参数都被处理为“将我要添加/减去的事物的这个组件设置为这个值”,而相同参数的复数版本说“添加/减去这个数字到/来自这个组件”。
请注意,relativedelta 文档还列出了每个组件的应用顺序,但只要说绝对值在相对值之前应用就足够了,因此relativedelta(month=3, months=2) 会将月份设置为三月,然后加上 2 个月(所以,基本上,它相当于 relativedelta(month=5))。
【讨论】:
weekday = MO(或weekday = calendar.MONDAY)的等价物可以是一月的month = 1,二月的month = 2,等等。
【讨论】:
Python arrow 库可以最优雅地处理这些操作。日期时间对象可以转换为箭头对象,反之亦然,如果您需要继续使用datetime,即与其他模块兼容。
【讨论】: