假设我有一个ISO 8601持续时间,表示为"P1M"
。口语化地说,这意味着 "一个月"。如果假定未知起始日期,是否有将其转换为秒数的标准规则?
- 对于30天的月份,可能是2,592,000。
- 对于31天的月份,可能是2,678,400。
- 对于二月份,可能是2,419,200或2,505,600。
我的直觉是没有办法在不知道上下文和日历中的秒数的情况下将“一个月”解析为确切的秒数。但是是否有标准规则/惯例以抽象的方式计算这些持续时间?
根据我找到的ISO 8601文档(第6页-http://xml.coverpages.org/ISO-FDIS-8601.pdf),似乎您说月份的秒数无法确定是正确的。但它确实指出,“在某些应用程序中,一个月被视为30天的时间单位”,因此这可能是一种有效的方法,具体取决于您的应用程序。
“日历时间”(年、月等)和“绝对时间”(小时、分钟、秒等)之间的区别有时是很重要的。例如,如果按照每30天支付而不是每月支付,有些人可能会抱怨某些年份有13次抵押贷款付款。
2020-01-01/2020-02-01 = P1M = P31D
2020-02-01/2020-03-01 = P1M = P29D
2019-02-01/2019-03-01 = P1M = P28D
P30D、P60D、P90D...
。2019-01-01/2020-01-01 = P1Y = P12M = P365D
2020-01-01/2021-01-01 = P1Y = P12M = P366D
P1M
,则默认使用今天的上下文。//What is a duration of one month in seconds ?
P1M = ? (no context)
//Use default context
Today = 2020-03-31
2020-03-31/P1M = 2020-03-31/2020-04-30
=> P1M = P30D
//A month contains 2 592 000 seconds
D
也取决于上下文。引用:“PT36H”在从夏令时切换到标准时间或从标准时间切换到夏令时时与“P1DT12H”不同。 - Socowi