是否有一种标准方法来表示持续时间、时间跨度或时间增量?

Is there a standard way to represent a time duration, time-span or time-delta?

如果我们接受有多种标准方式来表示时间和日期,那么是否有一种标准方式来表示时间跨度或时间增量?我要添加的要求是时间跨度的表示也应该易于解析。

例如 Days/HH:MM:SS.FFFFFF(例如 3/14:12:04.201000)是否可以接受? 使用 HH:小时,MM:分钟,SS:秒,FFFFFFF 秒的小数部分。

ISO 8601 定义了持续时间 的形式

P...Y...M...DT...H...M...S

其中 ... 是数字,

  • P(句点)将字符串标记为持续时间
  • Y年
  • M个月
  • D天
  • T(时间)解决月和分钟之间的歧义
  • 小时
  • M分钟
  • S秒

只要至少有一个组件,就可以省略值为 0 的组件(例如 PT5S 表示 5 秒)。最不重要的部分可以有一个小数值(例如 PT0.5H 表示半小时 = 30 分钟)。

但是,ISO 8601 定义了这些持续时间以指定 start_date_time + duration 形式的时间间隔。根据开始日期和时间,除 S 之外的每个组件的长度可能会有所不同。

  • 闰年可以有 365 天或 366 天。
  • 一个月可以有 28 到 31 天。
  • 更改夏令时时,一天可以有 23 到 25 个小时。
  • 分钟可以有 60 秒或 61 秒的闰秒。

另见 What is the value of the ISO 8601 duration `P1M` (in seconds)?。 ISO 8601 提到 一些 应用程序 可能 修复像 P1M = P30D 等持续时间,但没有 完全定义它。

要解决这些解释问题,您可以只使用秒,例如PT3600S 而不是 PT1H(标准确实 而不是 强制结转点,如 60s、24h 等)。然而,这似乎毫无意义。我宁愿只使用没有 PTS(unix 时间样式)的秒数,或者切换到非标准化(?)但像您建议的那样丰富的格式(视频时间戳)。