2 回答

TA貢獻1825條經驗 獲得超6個贊
java.time
int year = 2019;
DateTimeFormatter dateFormatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("MMM dd")
.toFormatter(Locale.ENGLISH);
List<LocalDate> finalDatesWithoutFormat = new ArrayList<>();
String dateString = "JAN 09";
MonthDay md = MonthDay.parse(dateString, dateFormatter);
finalDatesWithoutFormat.add(md.atYear(year));
System.out.println(finalDatesWithoutFormat);
此代碼段的輸出是:
[2019-01-09]
java.time 是現代 Java 日期和時間 API,包括一個用于不帶年份的日期的類MonthDay
,它可能比普通日期更好地滿足您的目的。我的代碼還顯示了如何提供一年來獲取LocalDate
(沒有時間的日期)。
我建議你不要使用Date
and SimpleDateFormat
。這些類設計不佳且早已過時,后者尤其是出了名的麻煩。
你的代碼出了什么問題?
根據您提供的信息,無法判斷您的代碼為何不起作用。可能的解釋包括以下,但可能還有其他解釋。
正如rockfarkas在另一個答案中所說,在連接你的字符串時,你沒有在月份和年份之間放置任何空格,但是你用于解析的格式字符串需要一個空格。
例如,如果您的月份縮寫是英文,而您的 JVM 的默認語言環境不是英文,則解析將失敗(除了月份縮寫重合的極少數情況)。您應該始終為您的格式化程序提供一個語言環境,以指定要解析(或生成)的字符串中使用的語言。
順便說一句,您的變量名稱finalDatesInMMMDDYYYYFormat
具有誤導性,因為 aDate
沒有(不能有)格式。

TA貢獻1802條經驗 獲得超10個贊
如果你想解析格式"MMM dd yyyy"
,你應該像這樣在你的測試字符串中添加一個額外的空格:
final String testString = dateList.get(5) + ' ' + year;
添加回答
舉報