500毫秒的持续时间应该如何使用ISO 8601表示?对我来说,文档并不是 100% 清晰。只是“PT0.5S”吗?
是的。
我只能找到 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
只是“PT0.5S”吗?
是的,这是正确的表述。
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。
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) 后面的每个日期和时间元素的值:
(n)
Y(n)
M(n)
DT(n)
H(n)
M(n)
S这里
P 是持续时间指示符(称为“句点”),并且始终放置在持续时间的开头。
Y 是年数值后面的年份指示符。
M 是月数值后面的月份指示符。
W 是周数值后面的周指示符。
D 是天数值后面的日期指示符。
T 是时间组件之前的时间指示符。
H 是跟在小时数值后面的小时指示符。
M 是分钟值后面的分钟指示符。
S 是秒数值后面的第二个指示符。