“PT”前缀在持续时间中代表什么?

2022-08-31 13:30:41

我正在尝试使用该类而不是.它具有卓越的文字语法。我喜欢它的灵活性,尽管它看起来很奇怪。Durationlong

“PT10S”的意思是10秒,接受“10秒”有什么问题?!好吧,没关系。

我只是好奇为什么选择PT前缀(而不是“DU”),为什么任何前缀在这里都比什么都没有更好?


答案 1

可以在Jesper链接到的页面上找到(ISO-8601 - 数据元素和交换格式 - 信息交换 - 日期和时间的表示)

P is the duration designator (for period) placed at the start of the duration representation.
Y is the year designator that follows the value for the number of years.
M is the month designator that follows the value for the number of months.
W is the week designator that follows the value for the number of weeks.
D is the day designator that follows the value for the number of days.
T is the time designator that precedes the time components of the representation.

所以P的意思是“周期”,因为没有日期组件,所以它只有一个“时间”。

您可以将其解释为“时间段”

选择“为什么”,你必须问问编写标准的ISO成员,但我的猜测是它更容易解析。(简短而明确)

时间组件的详细信息如下:

H is the hour designator that follows the value for the number of hours.
M is the minute designator that follows the value for the number of minutes.
S is the second designator that follows the value for the number of seconds. 

然后,的值解析为:PT20S

  • 时期
  • 时间
  • 20

因此,持续时间为20秒。

可以在javadoc中找到更多示例:https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-


答案 2

Java 在一段时间内采用了 ISO 8601 标准格式的子集。因此,“为什么”就是为什么标准是这样写的,这是一个猜谜游戏。我的去是:

  • P选择了时间段,以便您可以将持续时间与日期和/或时间区分开来。特别是因为一个句点也可以用与本地日期时间相同的格式书写,例如对于3年6个月4天12小时30分5秒,可以有必要区分。它还提供了一点快速方便的验证,以防您碰巧在预期持续时间的地方传递完全不同的字符串。是的,看起来很奇怪,但是一旦你习惯了它,你就会立即意识到它是一个持续时间,这可能是可行的。P0003-06-04T12:30:05PPPT10S
  • T选择日期部分和时间部分之间的时间有两个原因:
    • 为了与位于同一位置的日期时间字符串保持一致,例如 2018 年 7 月 4 日 15:00 小时。T2018-07-04T15:00
    • 为了消除几个月或几分钟内其他模棱两可的歧义:明确意味着3个月,而意味着3分钟。MP3MPT3M

推荐