是否有关于 UTC 与本地时间的传递时间的约定?

Is there a convention about passing times in UTC vs local time with an offset?

我在英国,我当地的时区是 GMT,时差为零 - 与 UTC 相同。但是,我们目前处于夏令时 (BST),这意味着我们还有 +1 小时。

例如,现在 BST 的当地时间是“2020-07-22 10:10:40”,而 UTC 的时间是“2020-07-22 09:10:40”。

如果我将时间传递给 API,使用 ISO 8601 格式,我可以选择

  1. 将其转换为UTC,并在末尾加上一个Z表示它是UTC,例如:

"2020-07-22T09:10:40Z"

  1. 显示我的当地时间,并在末尾添加时区偏移量,如下所示:

"2020-07-22T10:10:40:00+01:00"

其中一个比另一个“更好”吗?我想这可能取决于 API,但我想知道是否认为其中一个比另一个更好,或者是否存在使用其中一个或另一个的一些特定问题。

谢谢

如果API同时接受并且不需要偏移量信息,则没有规则或惯例。所以这里有一个建议:做更方便调试和支持的事情。因此,如果您希望支持人员也在英国,请发送英国时间。如果您预计海外人员偶尔需要读取传输的数据,请发送UTC。

毕竟 ISO 8601 被设计为人类可读机器可读。无论您选择哪种偏移量,您的数据都同样是机器可读的。人类的可读性是主观的。因此,让自己以可能正在阅读您的数据的人为指导,

确实有一般指南建议使用 UTC 进行跨时区时间交换。恕我直言,该准则表示您的 API 的设计者可能已将传入消息限制为仅限 UTC。如果他们不这样做,我会说你可以自由地做对你最有利的事情。这也表示不知道您的数据是否会传到任何其他时区。

我最近也遇到了类似的情况。我首先做了非常彻底的测试,以验证我的数据的接收者不关心偏移量。然后我选择发送带有本地偏移量的时间。发送者和接收者目前都在同一个时区(极有可能系统稍后也可能部署在另一个时区),我需要记录所有交换的消息,所以对于任何阅读日志的人来说我发现它很方便那里有当地时间。