这将失败:
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格式。
ISO8601标准允许COMMA或FULL STOP (点,句点)作为decimal mark持续几分之一秒。comma is preferred。
但是,当我尝试从包含逗号的输入字符串parse Instant时,抛出了DateTimeParseException。一个类似的带点的字符串成功了。
怎么啦?如何解析包含逗号的标准字符串?
发布于 2016-08-12 08:50:35
tl;dr
在java.time中只有点有效。只需用点替换逗号即可。
"2007-12-03T10:15:30,978Z".replace( "," , "." )仅支持点,不支持逗号
在Java8中,java.time类只需要一个句号(点,句点)字符作为小数标记。
在大多数其他方面,java.time类为ISO 8601标准格式提供了出色的支持。幸运的是,这一缺陷很容易在您自己的代码中得到弥补。解析ISO 8601字符串时,只需将任何逗号替换为点即可。
String input = "2007-12-03T10:15:30,978Z" ;
Instant instant = Instant.parse( input.replace( "," , "." ) );反之亦然,使用首选的逗号而不是点输出字符串。请注意,某些协议和库可能偏向其中任何一个角色。
String output = instant.toString().replace( "." , "," ) ;有关更详细的讨论,请参阅JDK-8132536的问题 和问题页面
https://stackoverflow.com/questions/38908226
复制相似问题