是否有标准方法来指示 ISO8601 格式的时间戳中的无效值?
Posted
技术标签:
【中文标题】是否有标准方法来指示 ISO8601 格式的时间戳中的无效值?【英文标题】:Is there a standard way to indicate an invalid value in an ISO8601-formatted timestamp? 【发布时间】:2018-05-10 19:22:47 【问题描述】:我有一些代码可以创建 ISO8601 格式的时间戳,但如果传入日期的格式无效,则转换失败。
我想知道是否有以这种格式表示无效时间戳的标准方法?
***提到 1583 年之前的几年没有在正常操作下处理,所以我的第一个想法是简单地将值设置为 0000-01-01T00:00:00Z
之类的值。如果有更标准的方法来指示无效值,我宁愿使用它。
【问题讨论】:
您想使用哪种编程语言? 如果有一种标准的方式来表示它,那它不是一个有效的时间戳吗? 我使用的是 C++,但它更多是我感兴趣的通用方法,而不是特定语言的细节。 【参考方案1】:ISO 8601 未定义表示无效时间戳的字符串。它只定义了 valid 格式的字符串是什么样子的。
此外,ISO 8601 使用proleptic Gregorian calendar,这意味着所有正数年份都有效。它允许负年份(通过协议),但没有定义诸如 BC/BCE 之类的时代。换句话说,0001-01-01
的前一天将是预测公历中的0000-12-31
。 0000-01-01
的前一天是 -0001-12-31
(第 0 年是闰年)。
至于您如何在您的代码中表示“无效”,这完全取决于语言和实现。在许多情况下,null
是合适的。如果您严格使用字符串,那么""
可能会更好。没有更多上下文很难说。
【讨论】:
数据以 JSON 字符串的形式交换,因此空字符串对我来说是一种明智的做法。null
(不是字符串)在 JSON 中也有效。根据反序列化的内容,它可能更合适。例如,作为 .Net 开发人员,我可能会将该字段反序列化为 Nullable<DateTime>
(又名。DateTime?
),在这种情况下 null 会自动出现,但我必须使用空字符串尽我所能教解析器如何处理。
This answer 也可能对您的决策有用。
看起来不错。以上是关于是否有标准方法来指示 ISO8601 格式的时间戳中的无效值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?
如何在 Swift 中解析/创建格式为小数秒 UTC 时区(ISO 8601、RFC 3339)的日期时间戳?