仅 ISO 8601 日期部分

ISO 8601 Date Portion ONLY

我们的前端只需要一个日期。我的理解是 JSON.NET 和 Web Api 的行业标准是 ISO 8601。在遵守 ISO 8601 的同时,是否可以 return 我们的 Web Api 中的日期部分标准,或者我们 JSON 对象的日期 属性 (dateOfBirth) 是否必须在时间部分全部为零才能遵守 ISO 8601 标准?

ISO 8601 是一个标准,它指定了许多 种不同的格式。第 4.1.2 节介绍日期,第 4.2.2 节介绍时间,第 4.3 节介绍日期和时间的组合。该规范还为每种格式定义了“基本格式”和“扩展格式”。

基本格式的一些例子:

  • 日期:20190611
  • 当地时间:140000
  • 日期和当地时间:20190611T140000

扩展格式的一些示例:

  • 日期:2019-06-11
  • 当地时间:14:00:00
  • 日期和当地时间:2019-06-11T14:00:00

一天中的时间也有变化,为 UTC 添加 Z 或与 UTC 的特定偏移量,例如 -07:00。 (这些不适用于 date-only 表格。)

因此,要直接回答您的问题,是的,您可以只传递日期。这仍然符合 ISO 8601 标准,只要您使用上面显示的任何一种 date-only 形式。 (JSON 回复通常选择扩展形式。)

顺便说一句,这不仅仅是一个选项,还是一个最佳实践。 Date-only 出生日期和其他周年纪念日期等值不应附加时间 - 即使它全为零。这样做会扭曲他们的意思。

也就是说,要注意一些陷阱:

  • 有些平台没有built-in date-only数据类型,会分配midnight。
  • JavaScript 的 Date 对象(通过 ECMAScript 标准)偏离 ISO 8601 并解析 date-only 值,就好像它们是在 UTC 午夜而不是当地时间午夜。因此,如果您从网页调用 API,您可能希望自己解析值,或使用库,或将它们保留为字符串而不是 Date 对象。
  • 有些时区在午夜时分有向前转换的日子(例如 DST),这意味着时钟从 23:59:59 滴答到 01:00:00。如果您指定午夜,一些实现会前进,一些会后退,还有一些会出错。

如果您必须将 date-only 值解析为 date-time 数据类型,避免这些问题的一种方法是分配中午 (12:00) 而不是午夜 (00:00) .

此外,您可能需要确保 ISO 8601 确实是您需要遵守的标准。许多人说的是 ISO 8601,但实际上他们的意思是 RFC 3339。 RFC 3339 大部分符合 ISO 8601,但只定义了日期 + 时间 + 偏移量配置文件。因此它适用于时间戳,但不适用于整个日期。