簡體   English   中英

逗號無法通過java.time.Instant解析

[英]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標准允許使用一個COMMAFULL STOP (點,期間)作為十進制標記為幾分之一秒。 逗號是首選

但是,當我嘗試從包含逗號的輸入字符串中解析 Instant ,會引發DateTimeParseException 相反,帶有點的類似字符串會成功。

怎么了? 如何解析此類包含逗號的標准字符串?

tl; dr

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM