我在日志檔案中有這個垃圾 DateFormat 需要決議以比較它。
它是這種格式。 Mon 03-Mai-21
我的嘗試:
DateFormat format = new SimpleDateFormat("EEE FF-MMM-YY", Locale.GERMAN);
String test = "Mon 03-Mai-21";
Date date = null;
try {
date = format.parse(test);
} catch (ParseException e) {
e.printStackTrace();
}
我ParseException在嘗試決議時遇到了錯誤,但我不知道我的模式有什么問題?
我的預期結果是 2021-05-03。
uj5u.com熱心網友回復:
時間
我建議您使用 java.time,現代 Java 日期和時間 API,用于您的日期作業。
為您的格式宣告一個格式化程式:
private static Map<Long, String> dayOfWeekAbbreviations
= Map.ofEntries(
Map.entry(1L, "Mon"),
Map.entry(2L, "Die"),
Map.entry(3L, "Mit"),
Map.entry(4L, "Don"),
Map.entry(5L, "Fre"),
Map.entry(6L, "Sam"),
Map.entry(7L, "Son"));
private static final DateTimeFormatter DATE_FORMATTER
= new DateTimeFormatterBuilder()
.appendText(ChronoField.DAY_OF_WEEK, dayOfWeekAbbreviations)
.appendPattern(" dd-MMM-uu")
.toFormatter(Locale.GERMAN);
像這樣決議:
String test = "Mon 03-Mai-21";
LocalDate date = LocalDate.parse(test, DATE_FORMATTER);
System.out.println(date);
輸出:
2021-05-03
Java 假定一周中的日期縮寫為 Mo., Di., Mi., Do., Fr., Sa., So。(至少我的 Java 11 是這樣;我認為有 Java 版本,默認情況下縮寫不帶點)。由于您的縮寫是Mon用于蒙塔格(星期一),我們需要提供我們自己的縮寫。這就是我通過地圖所做的。我不知道你在一周中的其他幾天得到哪些縮寫,所以請自己在地圖中填寫正確的縮寫。
當然,另一種可能的解決方案是確保您獲得的字串使用 Java 的縮寫。然后你可以EEE在你的格式模式字串中使用你的問題,這會使格式化程式更簡單。
你的代碼出了什么問題?
您的嘗試存在三個問題:
- 正如我所說,
EEE在你的格式模式字串中需要一個兩個字母的星期幾縮寫,就像Mo.這樣不能接受Mon. 這導致了您看到的例外。 FF用于“一個月中的星期幾”。所以你真的想把你的字串決議為2021 年 5 月的第 3 個星期一,這就是為什么我問你是否期望 5 月 17 日。小寫dd表示月份中的某一天。YY年份的大寫是錯誤的。大寫Y表示基于周的年份,僅適用于周數。對于今年你將需要較低的情況下y用SimpleDateFormat。WithDateTimeFormatteryou 可以在第 1 年之前的幾年使用u或y具有不同的含義。
鏈接
- Oracle 教程:解釋如何使用 java.time 的日期時間。
- Question:
uuuuversusyyyyinDateTimeFormatterformatting pattern codes in Java?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/356603.html
