操作失败:
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