我正在调用一个使用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日期的预期行为,还是服务做了一些奇怪的事情?
eeq64g8w1#
根据this此配置文件不指定可以使用多少位数来表示秒的小数部分。允许秒的小数部分的采用标准必须指定最小位数(大于或等于1的数字)和最大位数(最大值可以声明为“无限”)。这意味着服务使用的“掩码”将毫秒的第3位数字视为可选的,当它为0时,它将完全隐藏该值。一个解决方法是检查日期的长度,并在最后一个字符前添加一个0(假设它总是Z)
gywdnpxw2#
您可以使用 Date 类,它有一个 * 毫秒 * 的 * 构造函数方法 *。
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); out.println(f.format(new Date(0)));
个字符
型
不,这是有效的日期和时间。时间是 0 - 23,其中 0 是 12 am。
责任将归咎于服务,ISO 8601 只是一个符号或代码。
2条答案
按热度按时间eeq64g8w1#
根据this
此配置文件不指定可以使用多少位数来表示秒的小数部分。允许秒的小数部分的采用标准必须指定最小位数(大于或等于1的数字)和最大位数(最大值可以声明为“无限”)。
这意味着服务使用的“掩码”将毫秒的第3位数字视为可选的,当它为0时,它将完全隐藏该值。
一个解决方法是检查日期的长度,并在最后一个字符前添加一个0(假设它总是Z)
gywdnpxw2#
您可以使用 Date 类,它有一个 * 毫秒 * 的 * 构造函数方法 *。
个字符
型
不,这是有效的日期和时间。
时间是 0 - 23,其中 0 是 12 am。
责任将归咎于服务,ISO 8601 只是一个符号或代码。