jackson ISO-8601日期在0毫秒时应该是什么样子?

tyu7yeag  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(148)

我正在调用一个使用ISO-8601格式的日期的Web服务(据我所知)。
下面是我用来解析日期的模式(我使用Jackson来反序列化响应):

yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

字符串
大多数情况下,该服务返回的日期如下所示:

2022-08-19T22:48:17.228Z


但是,该服务偶尔会返回这样的日期:

2023-09-12T00:18:25Z


我认为这发生在毫秒数正好为0的时候。
这是ISO-8601日期的预期行为,还是服务做了一些奇怪的事情?

eeq64g8w

eeq64g8w1#

根据this
此配置文件不指定可以使用多少位数来表示秒的小数部分。允许秒的小数部分的采用标准必须指定最小位数(大于或等于1的数字)和最大位数(最大值可以声明为“无限”)。
这意味着服务使用的“掩码”将毫秒的第3位数字视为可选的,当它为0时,它将完全隐藏该值。
一个解决方法是检查日期的长度,并在最后一个字符前添加一个0(假设它总是Z)

gywdnpxw

gywdnpxw2#

  • ". ISO-8601日期在0毫秒时应该是什么样子?."*

您可以使用 Date 类,它有一个 * 毫秒 * 的 * 构造函数方法 *。

SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
out.println(f.format(new Date(0)));

个字符

  • "...服务偶尔会返回这样的日期:*
2023-09-12T00:18:25Z

  • 我认为这发生在毫秒数正好为0时..

不,这是有效的日期和时间。
时间是 0 - 23,其中 012 am

  • "...这是ISO-8601日期的预期行为,还是服务做了一些奇怪的事情?..."*

责任将归咎于服务,ISO 8601 只是一个符号或代码。

相关问题