从java sql date到java localdate的转换

时间:2019-07-05 07:39:20

标签: java datetime time

    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

1 个答案:

答案 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);