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 的默认语言环境不是英文,则解析将失败(除了月份缩写重合的极少数情况)。您应该始终为您的格式化程序提供一个语言环境,以指定要解析(或生成)的字符串中使用的语言。
顺便说一句,您的变量名称finalDatesInMMMDDYYYYFormat具有误导性,因为 aDate没有(不能有)格式。
TA贡献1802条经验 获得超10个赞
如果你想解析格式"MMM dd yyyy",你应该像这样在你的测试字符串中添加一个额外的空格:
final String testString = dateList.get(5) + ' ' + year;
添加回答
举报
