Java DateTimeFormatter

时间:2016-05-10 11:26:34

标签: java datetime

我正在尝试读取CSV文件,我需要解析某个日期值。 但是我收到了一个无法放置的DateTimeParseException。

我想读的字段是一个日期字段,如下所示: 08-May-2016

我使用的代码: LocalDate date = LocalDate.parse(row[3], DateTimeFormatter.ofPattern("d-M-yy"));其中row[3]是我从CSV文件中读取的字段。

我得到的例外:Text '08-May-16' could not be parsed at index 3

我认为d-M-yy应该能够读取一年中的单位数,两位数字和字母表示,这是错误的吗?

编辑:我已经尝试过本月的MMM-MM-M以及日间字段的dd-d。我仍然得到同样的例外。

2 个答案:

答案 0 :(得分:3)

此处的问题是,您在创建Locale时未提供DateTimeFormatter - 您需要使用支持该格式的Locale

System.out.println(LocalDate.parse("08-May-2016", DateTimeFormatter.ofPattern("dd-MMM-yyyy", Locale.ENGLISH)));

输出:

2016-05-08

这不起作用:

System.out.println(LocalDate.parse("08-May-2016", DateTimeFormatter.ofPattern("dd-LLL-yyyy", Locale.ENGLISH)));

输出:

Exception in thread "main" java.time.format.DateTimeParseException: Text '08-May-2016' could not be parsed at index 3
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
    at java.time.LocalDate.parse(LocalDate.java:400)

答案 1 :(得分:1)

  

我认为d-M-yy应该能够读取一年中的单位数,两位数字和字母表示,这是错误的吗?

是。您的模式将正确解析表单1-5-16的日期,但不会解析2016年5月10日。试试dd-MMM-yyyy