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

问题描述 投票:0回答:3

500毫秒的持续时间应该如何使用ISO 8601表示?对我来说,文档并不是 100% 清晰。只是“PT0.5S”吗?

time duration iso8601
3个回答
13
投票

是的。

我只能找到 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,5S
PT0.5S


5
投票

只是“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

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


0
投票

PT0.5S
是正确的,前提是 ISO 8601 持续时间格式为
P(n)Y(n)M(n)DT(n)H(n)M(n)S
没有毫秒的余地。

因此对于

10 milliseconds
它将是
PT0.01S
并且 1 毫秒可以表示为
PT0.001S


ISO 8601 持续时间使用以下格式表示,其中

(n)
替换为 (n) 后面的每个日期和时间元素的值:

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

这里

  • P 是持续时间指示符(称为“句点”),并且始终放置在持续时间的开头。

  • Y 是年数值后面的年份指示符。

  • M 是月数值后面的月份指示符。

  • W 是周数值后面的周指示符。

  • D 是天数值后面的日期指示符。

  • T 是时间组件之前的时间指示符。

  • H 是跟在小时数值后面的小时指示符。

  • M 是分钟值后面的分钟指示符。

  • S 是秒数值后面的第二个指示符。

© www.soinside.com 2019 - 2024. All rights reserved.