代表40,000,000秒作为ISO-8601期间

Pau*_*ham 11 iso8601

40,000,000秒是462.962天.如果我想将其表示为ISO-8601期间,请使用以下格式:

PnYnMnDTnHnMnS
Run Code Online (Sandbox Code Playgroud)

确定月份和年份的规则是什么?两者都不是精确的术语,标准表示它取决于期间的开始日期.

这是有道理的:它使得周期模糊而没有开始日期.是否有任何可接受的使用没有开始日期的期限的方法?

G.Y*_*G.Y 9

好的,我们来点订单:

该标准支持两种类型是: 日期为一个特定的时间点,因为0000年,直到9999年
或者 持续时间可以描述两个日期或时间仲裁者/时间跨度是不是两个具体日期之间的时间跨度.幸运的是,当你指定持续时间时,标准比日期更灵活:)

那么我们如何区分日期和仲裁时间之间的持续时间呢?
简单:如果你指定了一年的"P1Y" - 这正是你得到的.
如果你想计算这1年的天数 - 这将取决于你应用这一年的开始日期.
例如,如果说开始日期是2010年1月1日(因此二月有28天是正常的),那么计算中的1年值将产生365天.但是,如果说开始日期是2012年1月1日(因此2月因闰年而有29天),那么你的1年价值将产生366天......

但在这两种情况下,你想要1年 - 而你有1年.因此,第一件事是不要在你的情况下使用多年,因为你真正想要的是在几秒钟内指定相当于40000000 - 只是很快...所以我们的下一个选择是在几天内指定它而.962作为一个一天的一部分:

40000000秒是462天,23小时,6分40秒,根据我在ISO-8601中读到的内容,可以将其指定为持续时间:"P462DT23H6M40S"或者您可以简单地指定"PT40000000S"甚至"P462". 962D" - 所有进展持续时间.

为了减轻计算的痛苦,你可以使用这个非常简单的C#Line:
var timespan = new TimeSpan(0, 0, 40000000);
只需在它之后放一个断点,然后查看Timespan类为你计算的内部结构.
在那之后,将它们放入ISO-8601格式是相当容易的.

哦,最后一件事 - 是的,你也可以指定分数 - 例如"P0.5Y"来指定半年.

  • 有趣.所有实现都支持这个标准吗?所有实现都会正确解析"PT40000000S"吗? (2认同)
  • 我不知道标准的所有实现,并且人们可能会选择仅采用标准的一部分来满足他们的需求 - 把它放在一边,如果实现声称支持ISO-8601它应该能够解析PT40000000S或标准中描述的任何其他变体,否则它不完全支持该标准. (2认同)
  • 我的意思是,就像1Y的持续时间取决于开始日期一样,1D(甚至1M)的持续时间(以秒为单位)取决于开始时刻.因此,表示恰好4千万秒的持续时间的唯一方法是PT40000000S. (2认同)