我试图将一些日期字符串解析为日期值,但是,使用下面的代码,我得到了一个异常:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("Q'Q'uuuu - MMM");
String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));
例外情况如下
java.time.format.DateTimeParseException: Text '3Q2016 - Aug' could not be parsed: Unable to obtain LocalDate from TemporalAccessor: {MonthOfYear=8, QuarterOfYear=3, Year=2016},ISO of type java.time.format.Parsed
查看异常,我看到了正确的数据,但由于某些原因无法解析。
我看到的其他类似主题建议使用LocalDate或LocalDateTime,但两者都不起作用。
发布于 2019-03-21 16:14:37
正如this answer中所说的,您需要指定日期才能解析为LocalDate
。因此,一种解决方案是解析为YearMonth
,然后通过指定一天后将其转换为LocalDate
。
或者首先创建一个具有固定日期的DateTimeFormatter
:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("Q'Q'uuuu - MMM")
.parseDefaulting(ChronoField.DAY_OF_MONTH, 1)
.toFormatter(Locale.US);
String d = "3Q2016 - Aug";
System.out.println(LocalDate.parse(d, formatter));
我使用toFormatter(Locale.US)
使这个示例在所有环境中都能工作。在输入字符串与当前区域设置匹配的环境中,您可以改用toFormatter()
。
https://stackoverflow.com/questions/55268992
复制相似问题