我想将字符串更改为使用SimpleDateFormat
类的日期格式。我从字符串列表中将字符串作为String+Integer.toString(int)
传递,并将SimpleDateFormat pattern
作为输入。
注意:如果我传递的实际字符串(例如“ Jan 09 2019”)成功地将字符串转换为日期,则代替String+Integer.toString(int)
。我尝试了很多不同的事情。
dateList
是“ MMM dd”甲酸日期的列表。
通过执行dateList.get(5)+Integer.toString(year)
在该格式上添加年份,这使我可以解析异常<<-如果我像Jan 09 2019
这样对日期进行硬编码,则将字符串转换为日期,而不是这样做。
finalDatesInMMMDDYYYYFormat
是另一个以MMM dd yyyy格式保存日期的列表。
Utils.parseDate
是我在Utils类中写的一种方法,其中提到了try-catch块。
int year = 2019;
private List<String> dateList = new ArrayList<>();
private List<Date> finalDatesInMMMDDYYYYFormat = new ArrayList<>();
final String testString = dateList.get(5)+Integer.toString(year);
finalDatesInMMMDDYYYYFormat.add(Utils.parseDate(testString, new SimpleDateFormat("MMM dd yyyy")));
预期:将字符串更改为日期并将其添加到finalDatesInMMMDDYYYYFormat
实际:获取解析异常。
答案 0 :(得分:1)
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
和SimpleDateFormat
。这些类的设计欠佳,而且已经过时,尤其是后者,非常麻烦。
根据您提供的信息,无法确定您的代码为什么不起作用。可能的解释包括以下内容,但可能还有其他解释。
顺便说一句,您的变量名finalDatesInMMMDDYYYYFormat
令人误解,因为Date
尚未(无法拥有)格式。
java.time
。答案 1 :(得分:0)
如果要解析格式"MMM dd yyyy"
,则应在测试字符串中添加一个额外的空格,如下所示:
final String testString = dateList.get(5) + ' ' + year;