由于一个月的真实秒数需要一些上下文,当一个时间段涉及到时间范围时,如何计算开始时间或结束时间?
例如:
2024-02-15T12:34:56/P1M16D
有两种我认为应该合理但产生截然不同的结果的方法:
步骤 | 从左到右(先计算最重要的部分) | 从右到左(先计算最低有效部分) |
---|---|---|
0(原值) |
|
|
1 | (+1M) |
(+16D) |
2 | (+16D) |
(+1M) |
如何进行计算?
另一个稍微相关的问题,假设是这样的:
2024-02-15T12:34:56/2024-04-02T12:34:56
以下是有效的表达式吗?
2024-02-15T12:34:56/P2M-13D
这可能会减少混乱,因为我上面的两种方法会导致相同的结束时间。
我将把解析留给你,但看起来你想要dateutil.relativedelta:
from datetime import datetime
from dateutil.relativedelta import relativedelta
s = '2024-01-30T12:34:56'
start = datetime.fromisoformat(s)
print(start)
end1 = start + relativedelta(months=1)
print(end1)
end2 = end1 + relativedelta(years=1)
print(end2)
输出:
2024-01-30 12:34:56
2024-02-29 12:34:56
2025-02-28 12:34:56