ISO 8601持续时间格式含毫秒?

25

如何使用ISO 8601表示500毫秒的持续时间?对我来说,文档并不完全清晰。它只是"PT0.5S"吗?

答案:是的,500毫秒的ISO 8601表示法为"PT0.5S"。

5
我无法回答,但我同意你的解释。遗憾的是,维基百科是最方便获取的“文档”,因为要回答这个问题必须从ISO购买完整规范。 - Mark Melville
6
我经常认为让人们为标准文件付费并不是很好地促进了该标准。 - exception
4个回答

15

是的。

我只能找到一份关于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指定的小数符号分离:即逗号[,]或句点[.]。其中,逗号是首选符号。如果数字的大小小于单位,则小数符号前面应该有一个零(请参阅ISO 31-0);
c)如果这些表达式中的任何一个的年数、月数、日数、小时数、分钟数或秒数等于零,则可以省略数字和相应的标识符;然而,至少应存在一个数字及其标识符。请注意,不允许删除前导非零组件;
d)如果所有时间组件均不存在,则标识符T应不存在。
所有这些与维基百科文章一致,因此500毫秒的ISO-8601持续时间格式应为PT0,5SPT0.5S

尽管ISO8601允许最低级组件中包含分数,但Java仅允许秒钟中包含分数。 - Pablo Pazos

6

只需要写“PT0.5S”吗?

是的,这是正确的表示方法。

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

java.time.Duration是基于ISO-8601标准建模,并作为JSR-310实现的一部分引入。

演示:

import java.time.Duration;

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

输出:

PT0.5S

Java 日期和时间教程了解现代日期时间API。


1

PT0.5S 是正确的,只要使用ISO 8601持续时间格式P(n)Y(n)M(n)DT(n)H(n)M(n)S,没有毫秒的位置。

所以对于10 毫秒,应该是PT0.01S,而 1 毫秒可以表示为PT0.001S


ISO 8601持续时间使用以下格式表示,其中(n)被替换为后面的日期和时间元素的值:

P(n)Y(n)M(n)DT(n)H(n)M(n)S

这里

  • P是持续时间的标识符(称为“周期”),始终放置在持续时间的开头。

  • Y是年份的标识符,紧跟着年数的值。

  • M是月份的标识符,紧跟着月数的值。

  • W是周数的标识符,紧跟着周数的值。

  • D是天数的标识符,紧跟着天数的值。

  • T是时间的标识符,位于时间组件之前。

  • H是小时的标识符,紧跟着小时数的值。

  • M是分钟的标识符,紧跟着分钟数的值。

  • S是秒数的标识符,紧跟着秒数的值。


0
截至今天,根据非官方消息,可以访问timestamp-converter.com来查找以下示例(我猜是在页面创建时加载的)。
...
ISO 8601
2023-08-25T08:35:16.792Z
supporting format: 1970-01-01T00:00:00.000Z or 1970-01-01T00:00:00.000+00:00
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接