[英]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.