如何计算ISO8601开始时间和结束时间

问题描述 投票:0回答:1

由于一个月的真实秒数需要一些上下文,当一个时间段涉及到时间范围时,如何计算开始时间或结束时间?

例如:

2024-02-15T12:34:56/P1M16D

有两种我认为应该合理但产生截然不同的结果的方法:

步骤 从左到右(先计算最重要的部分) 从右到左(先计算最低有效部分)
0(原值)
2024-02-15T12:34:56
2024-02-15T12:34:56
1
2024-03-15T12:34:56
(+1M)
2024-03-02T12:34:56
(+16D)
2
2024-03-31T12:34:56
(+16D)
2024-04-02T12:34:56
(+1M)

如何进行计算?


另一个稍微相关的问题,假设是这样的:

2024-02-15T12:34:56/2024-04-02T12:34:56

以下是有效的表达式吗?

2024-02-15T12:34:56/P2M-13D

这可能会减少混乱,因为我上面的两种方法会导致相同的结束时间。

datetime datetime-format iso8601
1个回答
0
投票

我将把解析留给你,但看起来你想要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
© www.soinside.com 2019 - 2024. All rights reserved.