[英]Comma fails parsing by 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标准允许使用一个COMMA或FULL STOP (点,期间)作为十进制标记为几分之一秒。 逗号是首选 。
但是,当我尝试从包含逗号的输入字符串中解析 Instant
,会引发DateTimeParseException
。 相反,带有点的类似字符串会成功。
怎么了? 如何解析此类包含逗号的标准字符串?
在Java.time中,只有点有效。 只需用点替换逗号。
"2007-12-03T10:15:30,978Z".replace( "," , "." )
在Java 8中,java.time类只期望FULL STOP(点,句点)字符作为小数点。
在大多数其他方式中,java.time类为ISO 8601标准格式提供了出色的支持。 幸运的是,这种不足很容易在您自己的代码中得到纠正。 解析ISO 8601字符串时,只需将任何逗号替换为一个点即可。
String input = "2007-12-03T10:15:30,978Z" ;
Instant instant = Instant.parse( input.replace( "," , "." ) );
进行相反的操作以使用首选逗号而不是点来输出String。 请注意,某些协议和库可能偏向任一字符。
String output = instant.toString().replace( "." , "," ) ;
有关更多详细的讨论,请参阅问题DateTimeFormatter
以在小数秒内处理FULL STOP或COMMA,以及JDK-8132536的问题页面
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.