在java.time類中,我們如何指定DateTimeFormatter
的格式化模式,以允許FULL STOP(.
)(句點或點)或COMMA (,
)作爲分數秒的分隔符?`DateTimeFormatter`在小數秒內處理FULL STOP或者COMMA
例如,用於解析在20090813145607.0Z
和20090813145607,0Z
在任一.0Z
或,0Z
結束的輸入日期值以下工作。
String input = "20090813145607.0Z";
DateTimeFormatter f = DateTimeFormatter.ofPattern ("uuuuMMddHHmmss[,S][.S]X");
但是用於打印,輸出包含既,產生一個重新對分數秒。
20090813145607,0.0Z
所以我推斷我我的格式設置模式的使用[,S][.S]
是不是得到這個功能的正確方法。
DecimalStyle
我試圖用DateTimeFormatter::withDecimalStyle
方法傳遞DecimalStyle
,但未能表現如我所料,我的實驗。該文件並沒有真正解釋其預期的行爲。
此問題很重要,因爲ISO 8601標準建議使用COMMA,但允許完全停止。要麼在實踐中經常使用。
Instant
無法容忍一個逗號
也許這種寬容逗號和/或點作爲decimal mark是不可能的java.time。
我用Java 8 Update 102試了下面的代碼。第一個帶有FULL STOP(點)的輸入成功,而第二個COMMA輸入失敗。
String inputDot = "2016-01-02T12:34:56.7Z"; // Succeeds.
Instant instantDot = Instant.parse (inputDot);
String inputComma = "2016-01-02T12:34:56,7Z"; // Fails. Throws a DateTimeParseException.
Instant instantComma = Instant.parse (inputComma);
爲了澄清,你想要一個單獨的'DateTimeFormatter'來處理這兩種格式的解析,但格式化的單一格式? –
我不知道「DateTimeFormatter」是否允許這種「或」模式。我能想到的兩種解決方法是1. make 2格式化程序,一個用於','和一個用於'.',如果第一個解析失敗,則使用第二個。或2,通過用'.'替換第三個字符來「歸一化」輸入,如果它是'''',並且可以使用單個格式化程序 –
@SotiriosDelimanolis是的我想要一個適用於輸入和輸出的格式化程序。我認爲java.time類對命令和點都有這樣的雙向支持,但是錯誤的假設。看看我的編輯顯示'Instant.parse'可以處理點而不是逗號。 –