首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取"parse exception“

获取"parse exception“
EN

Stack Overflow用户
提问于 2019-02-12 03:19:39
回答 2查看 66关注 0票数 0

对于我使用的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块。

代码语言:javascript
复制
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:获取分析异常。

EN

回答 2

Stack Overflow用户

发布于 2019-02-12 17:18:30

java.time

代码语言:javascript
复制
    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 (没有时间的日期)。

我建议你不要使用DateSimpleDateFormat。这些类设计得很差,而且很久以前就过时了,后者尤其麻烦。

你的代码出了什么问题?

从您提供的信息中,不可能知道为什么您的代码不能工作。可能的解释包括以下几点,但可能还有其他解释。

  • 正如rockfarkas在另一个答案中所说,在连接字符串时,你没有在月份和年份之间放任何空格,但是你用来解析的格式字符串需要一个空格。
  • 如果你的月份缩写是英语的,而你的JVM的默认语言环境不是英语,那么解析将失败(除非在极少数情况下月份缩写重合)。应始终为格式化程序提供区域设置,以指定要分析(或生成)的字符串中使用的语言。

顺便说一句,您的变量名finalDatesInMMMDDYYYYFormat具有误导性,因为Date没有(不能有)格式。

链接

解释如何使用区域设置错误导致日期解析失败的java.time.

票数 1
EN

Stack Overflow用户

发布于 2019-02-12 04:09:14

如果您希望解析格式为"MMM dd yyyy",则应该向测试字符串添加额外的空格,如下所示:

代码语言:javascript
复制
final String testString = dateList.get(5) + ' ' + year;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54637615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档