假设我有ISO 8601持续时间,表示为"P1M"
。通俗地说,这意味着"一个月。"假设开始日期未知,是否有将其转换为秒数的标准规则?
我的直觉说没有办法解决"一个月"在不知道上下文的情况下精确的秒数,以及在日历上布置这些秒的位置。但是,是否有标准的规则/惯例以抽象的方式计算这些持续时间?
答案 0 :(得分:6)
根据我发现的ISO 8601文档(第6页 - http://xml.coverpages.org/ISO-FDIS-8601.pdf),您似乎是正确的,因为一个月内的秒数无法确定。但是它注意到"在某些应用程序中,一个月被视为30天的时间单位,因此根据您的应用程序,这可能是一种有效的方法。
"日历时间"之间的区别(年,月等)和"绝对时间" (小时,分钟,秒等)有时是重要的。举个例子,有些人可能会抱怨,如果他们每30天支付一次,而不是每个月支付13次抵押贷款。
答案 1 :(得分:0)
是的,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
如果您要使用上下文的固定持续时间,请改用日期符号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-31
=> P1M = P30D
//A month contains 2 592 000 seconds