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(沒有時間的日期)。
我建議你不要使用Dateand SimpleDateFormat。這些類設計不佳且早已過時,后者尤其是出了名的麻煩。
你的代碼出了什么問題?
根據您提供的信息,無法判斷您的代碼為何不起作用??赡艿慕忉尠ㄒ韵?,但可能還有其他解釋。
正如rockfarkas在另一個答案中所說,在連接你的字符串時,你沒有在月份和年份之間放置任何空格,但是你用于解析的格式字符串需要一個空格。
例如,如果您的月份縮寫是英文,而您的 JVM 的默認語言環境不是英文,則解析將失?。ǔ嗽路菘s寫重合的極少數情況)。您應該始終為您的格式化程序提供一個語言環境,以指定要解析(或生成)的字符串中使用的語言。
順便說一句,您的變量名稱finalDatesInMMMDDYYYYFormat具有誤導性,因為 aDate沒有(不能有)格式。
TA貢獻1802條經驗 獲得超10個贊
如果你想解析格式"MMM dd yyyy",你應該像這樣在你的測試字符串中添加一個額外的空格:
final String testString = dateList.get(5) + ' ' + year;
添加回答
舉報
