問題:
問題:解析日期使用SimpleDateFormat 的時間字串在特定裝置上失敗,導致「無法解析的日期」錯誤。
分析:SimpleDateFormat 需要一個 Locale 參數來指定日期解析的語言和文化約定。如果未指定區域設置,則使用系統的預設區域設定。這可能會導致在具有不同區域設定的裝置上解析不一致。
使用現代的 DateTimeFormatter API 來取代 SimpleDateFormat。 它提供了特定於語言環境的解析和格式化,提高了效能和靈活性。
詳細說明:給定日期-時間字串(「24 Oct 2016 7:31 pm」)是英文的。但是,如果系統的預設 Locale 不是英文(例如,法國電話),預設的 SimpleDateFormat 實例將無法解析它。
Java 8 (DateTimeFormatter):DateTimeFormatter dtf = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendPattern("d MMM uuuu h:m a") .toFormatter(Locale.ENGLISH); LocalDateTime ldt = LocalDateTime.parse(strDateTime, dtf);
在 Java 8 中,使用具有明確 Locale 的 DateTimeFormatter 來解析自訂日期時間字串。避免使用預先定義的格式化程序,它們不接受區域設定。例如:
Java 6/7 (ThreeTen-Backport):如果無法使用Java 6 或Java 7,請使用ThreeTen-Backport 向後移植DateTimeFormatter 功能。
以上是為什麼我的 SimpleDateFormat 無法解析日期,如何使用 Locale 和 DateTimeFormatter 來修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!