仅ISO 8601日期部分

时间:2019-06-11 18:07:12

标签: datetime iso8601 isodate

我们的前端只想要一个日期。我的理解是JSON.NET和Web Api的行业标准是ISO8601。可以在遵循ISO 8601标准的情况下仅从Web Api返回日期部分,或者将JSON对象的date属性(dateOfBirth)为了符合ISO 8601标准,时间部分必须全为零吗?

1 个答案:

答案 0 :(得分:2)

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。 (这些不适用于仅日期的表单。)

因此,要直接回答您的问题,是的,您只能输入日期。只要您使用上面显示的任一仅日期形式,它仍然符合ISO 8601。 (扩展形式通常用于JSON响应。)

顺便说一句,这不仅是一种选择,还是一种最佳实践。仅日期值(例如生日和其他周年纪念日)不应附加时间-即使全为零。这样做会扭曲其含义。

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

  • 某些平台没有内置的仅日期数据类型,将分配午夜时间。
  • JavaScript的Date对象(通过ECMAScript标准)与ISO 8601不同,并且将仅日期值解析为好像位于UTC午夜而不是当地时间午夜。因此,如果您要从网页调用API,则可能需要自己解析值,使用库或将它们保留为字符串而不是Date对象。
  • 某些时区的午夜正好有正向转换的时间(例如DST),这意味着时钟从23:59:59到01:00:00滴答。如果您指定午夜,则某些实现将向前执行,某些实现将向后执行,而某些则会出错。

如果必须将仅日期值解析为日期时间数据类型,则避免这些问题的一种方法是分配正午(12:00)而不是午夜(00:00)。

此外,您可能需要确保ISO 8601确实是您需要遵守的标准。许多人在实际使用RFC 3339时说ISO 8601。 RFC 3339主要符合ISO 8601,但仅定义了日期+时间+偏移量配置文件。因此,它适合时间戳记,而不适合整个日期。