java.time.Instant解析逗号失败



操作失败:

Instant.parse( "2007-12-03T10:15:30,978Z" )  // Fails with comma

如果成功:

Instant.parse( "2007-12-03T10:15:30.978Z" )  // Succeeds with dot

java。time类在解析或生成日期-时间值的字符串表示时默认使用标准ISO 8601格式。

ISO 8601标准允许逗号或句号(点、句号)作为分数秒的小数点。逗号优先。

但是当我尝试从包含逗号的输入字符串中解析Instant时,会抛出DateTimeParseException。成功生成一个类似的字符串,但使用点代替。

怎么了?如何解析包含逗号的标准字符串?

br

只有点在java.time中有效。用点代替逗号。

"2007-12-03T10:15:30,978Z".replace( "," , "." )

只支持点,不支持逗号

在Java 8中,Java。time类只期望一个FULL STOP(点、句号)字符作为小数点。

在大多数其他方面,java。时间类提供了对ISO 8601标准格式的出色支持。幸运的是,这个缺陷很容易在您自己的代码中弥补。解析ISO 8601字符串时,只需将任何逗号替换为点。

String input = "2007-12-03T10:15:30,978Z" ;
Instant instant = Instant.parse( input.replace( "," , "." ) );

执行相反的操作,以使用首选逗号而不是点输出字符串。请注意,某些协议和库可能偏向于其中一个字符。

String output = instant.toString().replace( "." , "," ) ;

有关更详细的讨论,请参阅Question DateTimeFormatter以处理小数秒中的句号或逗号,以及JDK-8132536

的问题页面。

相关内容

  • 没有找到相关文章

最新更新