对于我使用的SimpleDateFormat类,我想将字符串更改为日期格式。我将字符串作为字符串列表中的String+Integer.toString(int)传递,并将SimpleDateFormat pattern作为输入传递。注意:如果我像"Jan 09 2019“这样成功地将字符串转换为日期,而不是String+Integer.toString(int),则会成功地将字符串转换为日期。我尝试了很多不同的东西。
dateList是"MMM“格式日期的列表。通过执行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
Actual:获取分析异常。
发布于 2019-02-12 17:18:30
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 date and time API java.time包含一个不带年份的日期类MonthDay,它可能比普通日期更适合您的需要。我的代码还显示了如何提供年份来获取LocalDate (没有时间的日期)。
我建议你不要使用Date和SimpleDateFormat。这些类设计得很差,而且很久以前就过时了,后者尤其麻烦。
你的代码出了什么问题?
从您提供的信息中,不可能知道为什么您的代码不能工作。可能的解释包括以下几点,但可能还有其他解释。
顺便说一句,您的变量名finalDatesInMMMDDYYYYFormat具有误导性,因为Date没有(不能有)格式。
链接
解释如何使用区域设置错误导致日期解析失败的java.time.
发布于 2019-02-12 04:09:14
如果您希望解析格式为"MMM dd yyyy",则应该向测试字符串添加额外的空格,如下所示:
final String testString = dateList.get(5) + ' ' + year;https://stackoverflow.com/questions/54637615
复制相似问题