記Java時間格式化的注意事項

記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包下的時間類
小白只想到這種方案,歡迎各路大神指出錯誤

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章