記Java時間格式化的注意事項
今天在嘗試將格式不明的時間轉換爲標準的時間格式時,遇到了幾個問題,在此記錄下
【需求:將格式不明的時間轉換爲標準格式,如將“HH:mm yyyy/MM/dd”、“HH:mm:ss”、“yyyy/MM/dd”等轉換爲“yyyy-MM-dd HH:mm:ss”。缺失部分用o補齊】
注意點1:simpledateformat
SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
// 設置以嚴格的格式解析string
format.setLenient(false);
try {
Date date = format.parse("2018/03/28 23:23:12"); // 不會報錯
SimpleDateFormat standardFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(standardFormat.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
輸出結果:
2018-03-28 00:00:00
很明顯,結果中時分秒被忽略了。如果想精確解析未知格式的時間時,需要注意這種情況
注意點2:java8中的localdatetime、localdate、localtime的支持格式
採用了java8的java.time包下的時間類
LocalDateTime localDateTime = LocalDateTime.parse(datetime, DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")); // 只支持年月日時分秒都齊全的情況,如2018/03/28 23:23:12
LocalDate localDate = LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy/MM/dd")); // 只支持年月日,如2018/03/28
LocalTime localTime = LocalTime.parse(time, DateTimeFormatter.ofPattern("HH:mm:ss")); // 只支持時分秒,如23:23:12
若想將爲止的時間格式轉換爲標準的格式,則需要輪詢並捕獲異常的方式一個個嘗試
結論
綜上所述,如果想精確的轉換時間,則應該採用java.time包下的時間類
小白只想到這種方案,歡迎各路大神指出錯誤