40,000,000秒是462.962天。如果我想将其表示为ISO-8601期间,请使用以下形式:
PnYnMnDTnHnMnS
确定月份和年份的规则是什么?两者都不是精确的术语,标准说它取决于期间的开始日期。
这是有道理的:如果没有开始日期,它会使周期模糊不清。是否有任何可接受的方法来使用没有开始日期的期间?
答案 0 :(得分:9)
好的,我们来点订单:
标准支持这两种类型: 日期作为自0000年起至9999年的特定时间点 要么 持续时间,可能描述两个日期之间的时间跨度或仲裁持续时间/时间跨度不在两个特定日期之间。幸运的是,当你指定持续时间时,标准比日期更灵活:)
那么我们如何区分日期和仲裁时间之间的持续时间呢?
简单:如果您指定了一年的“P1Y” - 这正是您所得到的
如果你想计算这1年的天数 - 这将取决于你应用这一年的开始日期。
例如,如果说开始日期是2010年1月1日(因此2月有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#线:
var timespan = new TimeSpan(0, 0, 40000000);
只需在它之后加一个断点,然后查看Timespan类为您计算的内部结构。
在那之后,将它们变成ISO-8601格式是相当容易的。
哦,最后一件事 - 是的,你也可以指定分数 - 例如“P0.5Y”来指定半年。
答案 1 :(得分:2)
当我阅读(免费提供的文件)标准时,第一个问题的答案
确定月份和年份的规则是什么?
...是没有规则,因为(如你所知)没有开始日期/时间或持续时间是不可能的。因此,需要上下文。
至于你的第二个问题,
是否有任何方法可以使用没有开始日期的期间?
绝对:见Unix Time。在Unix时间,40,000,000秒将表示为40000000
。
非常简单的转换,我几乎不用计算器! ;)
编辑:
(不完美)类比:
仅使用公制系统,从伦敦到芝加哥有多远?度量系统定义为表示此距离的最佳/最准确方法是什么?
嗯,公制系统定义了我们可以使用的长度/距离单位:米。
问题是公制系统根本不解决所涉及的变量。我们是否考虑到了地球的曲率?这是一条几何直线,这是“像乌鸦一样”,这是根据可用的公共路线和已知的飞行路径确定的旅行距离吗?
答案是,如果没有更多的上下文,就无法做到。
答案 2 :(得分:1)
正如G.Y.的另一个答案中提到的,并非所有年份都是相同的天数。如果你要转换成几天也是如此 - 并非所有日子都是24小时。最常出现的地方是在跨越夏令时间界限的时间段内,使时间段减去一个小时(当然,如果它超过偶数个边界,则错误取消)。
这可能发生的第二个地方是这个时期越过月末边界,因为你可以获得或失去一个闰秒。同样,这种情况很少发生在大多数业务应用程序中,并且通常会被忽略,但如果您正在协调多个与世界时钟同步的系统,则可能会出现问题。