ISO 8601持续时间,以毫秒为单位?

时间:2014-11-21 09:53:37

标签: time duration iso8601

如何使用ISO 8601表达500毫秒的持续时间?对我来说,documentation并非100%明确。它只是“PT0.5S”吗?

3 个答案:

答案 0 :(得分:5)

我只能找到8601的旧草稿,但它在分数表示中是明确的:

  

5.5段时间

     

5.5.1指定时间段的方法

     

一段时间应以下列方式之一表示:

     

a)作为由特定开始和特定结束分隔的持续时间;

     

b)作为在一个或多个特定组件中表示但未关联的持续时间   任何特定的开始或结束;

     

c)作为与特定开始相关的持续时间;

     

d)作为与特定结束相关的持续时间。

     

5.5.2分隔符和指示符

     

应使用固相线[/]来分离5.5.1 a),c)和d)中的两个组成部分。

     

对于5.5.1 b),c)和d)指示符[P]应在没有空格的前面表示持续时间。

     

其他指示符(以及用于表示省略组件的连字符)应按如下所示使用   5.5.4和5.5.5以下。

以后

  

5.5.3.1使用时间单位指示符格式化

     

在   时间段或重复时间间隔持续时间的表达式可以由数据元素表示   可变长度。指定人员应遵循年限   [Y],[M]的月数,[W]的周数和[D]的天数。那个部分   包括时间分量在前应由指示符[T];应遵循的小时数   [H],[M]的分钟数和[S]的秒数。在例子中[n]   表示一个或多个数字,构成正整数或零。

     

在完整的陈述中,格式应为nYnMnDTnHnMnS或nW。

     

对于这种持续时间格式的精度,十进制或截断表示,遵循以下规则   适用:

     

a)如果特定应用需要,可以省略最低阶组件来表示   持续时间精度降低;

     

b)如果特定应用需要,最低阶分量可能有小数。该   小数部分应从整数部分除以ISO 31-0中规定的十进制符号:即   逗号[,]或句号[。]。其中,逗号是首选标志。如果数量的幅度较小   如果小于1,则十进制符号前面应为零(参见ISO 31-0);

     

c)如果这些表达式中的年,月,日,小时,分钟或秒数等于   零,数字和相应的指示符可能不存在;但是,至少有一个数字及其数字   指定人员应在场。请注意,不允许删除前导非零组件;

     

d)如果没有所有时间成分,则不存在指示符T.

这一切与维基百科文章一致,因此持续时间为500毫秒的ISO-8601应为PT0,5SPT0.5S

答案 1 :(得分:1)

<块引用>

它只是“PT0.5S”吗?

是的,这是正确的表示。

使用 Java-8 标准库进行测试

java.time.DurationISO-8601 standards 为模型,并作为 JSR-310 implementation 的一部分引入。

演示:

import java.time.Duration;

public class Main {
    public static void main(String[] args) {
        System.out.println(Duration.ofMillis(500));
    }
}

输出:

PT0.5S

Trail: Date Time 了解现代日期时间 API。

答案 2 :(得分:-4)

由于ISO 8601代表日期和时间而非间隔,所以我假设从1970年1月1日星期四起500毫秒(就像unix时间戳一样)。

1970-01-01T00:00:00.5Z

更新: 是的&#39; PT0.5S&#39;是您引用的文档的正确解释。 显然我之前的回答错过了文档中的持续时间部分,或者可能会在以后添加。谢谢@ strife25