ISO 8601持续时间"P1M"的值是多少(以秒为单位)?

smi*_*lli 3 duration iso8601 date-math

假设我有一个ISO 8601持续时间,表示为"P1M".通俗地说,这意味着"一个月".假设开始日期未知,是否有将其转换为秒数的标准规则?

  • 30天的月份,可能是2,592,000.
  • 31天的月份可能是2,678,400.
  • 2月份可能是2,419,200或者可能是2,505,600.

我的直觉说没有办法在不知道背景的情况下将"一个月"解决到一个确切的秒数,并且这些秒在这些日历上排列.但是,是否有标准的规则/惯例以抽象的方式计算这些持续时间?

Bap*_*tou 7

您是对的,ISO 8601 持续时间取决于上下文。持续时间是两个日期之间的一段时间/时间间隔。

例子 :

2020-01-01/2020-02-01 = P1M = P31D
2020-02-01/2020-03-01 = P1M = P29D
2019-02-01/2019-03-01 = P1M = P28D
Run Code Online (Sandbox Code Playgroud)

如果您想要独立于上下文的固定持续时间,请改用日期表示法P30D, P60D, P90D...

这同样适用于多年:

2019-01-01/2020-01-01 = P1Y = P12M = P365D
2020-01-01/2021-01-01 = P1Y = P12M = P366D
Run Code Online (Sandbox Code Playgroud)

如果您无法获得有关持续时间的上下文信息(例如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
Run Code Online (Sandbox Code Playgroud)

  • 维基百科有一个例子,其中甚至“D”也取决于上下文。引用:切换夏令时时,“PT36H”与“P1DT12H”不同。 (2认同)

Jak*_*fin 6

根据我发现的ISO 8601文档(第6页 - http://xml.coverpages.org/ISO-FDIS-8601.pdf),您似乎是正确的,因为一个月内的秒数无法确定.但是它确实注意到"在某些应用中,一个月被视为30天的时间单位",因此根据您的应用,这可能是一种有效的方法.

"日历时间"(年,月等)和"绝对时间"(小时,分钟,秒等)之间的区别有时是重要的.举个例子,有些人可能会抱怨,如果他们每30天支付一次,而不是每个月支付13次抵押贷款.