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

Wer*_*ner 10 time duration iso8601

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

Ser*_*sta 7

是。

我只能找到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将不存在。

所有这一切与Wikipedia文章一致,因此持续时间为500 ms的ISO-8601应该为PT0,5SPT0.5S


Arv*_*ash 6

只是“PT0.5S”吗?

是的,这是正确的表述。

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

java.time.DurationISO-8601 标准为模型,并作为JSR-310 实施的一部分引入。

演示:

import java.time.Duration;

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

输出:

PT0.5S
Run Code Online (Sandbox Code Playgroud)

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