String oldDate = "04-07-19 02:41:39.063000000 PM";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("dd-MM-YY HH:mm:ss")
.appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true)
.padNext(1)
.appendText(ChronoField.AMPM_OF_DAY)
.toFormatter();
LocalDate parseDate = LocalDate.parse(oldDate, formatter);
我从数据库中获得的日期是“ 04-07-19 02:41:39.063000000 PM” 我想解析日期并将其转换为我方便的形式。 但是当我尝试使用上面提到的DateTimeFormatter解析日期时,代码将引发异常。
新日期应采用下面提到的格式
String newDate = parseDate.format(DateTimeFormatter.ofPattern("dd-MMMM-uuuu"));
有人可以帮助我跟踪错误吗?
我获得的例外是
Exception in thread "main" java.time.format.DateTimeParseException: Text '04-07-19 02:41:39.063000000 PM' could not be parsed at index 55
答案 0 :(得分:2)
在您的模式中,您几乎没有错误。首先padNext()
在固定宽度上添加填充 。在您的情况下,应该为28或类似的值。我刚刚将其替换为appendLiteral(' ')
。然后HH
在一天的24小时内重新出现几个小时,不适用于AM / PM。最后一件事是年份,YY
代表了JavaDoc所说的“基于周的年份”(不确定这意味着什么)-必须更改为yy
才能起作用。
工作模式:
String oldDate = "04-07-19 02:41:39.063000000 PM";
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("dd-MM-yy hh:mm:ss")
.appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true)
.appendLiteral(' ')
.appendText(ChronoField.AMPM_OF_DAY)
.toFormatter();
LocalDate parseDate = LocalDate.parse(oldDate, formatter);
System.out.println(parseDate);