преобразование из даты Java Java SQL в локальную дату Java - PullRequest
0 голосов
/ 05 июля 2019
    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"));

Может кто-нибудь помочь мне отследить ошибку?

Исключением является получение IAM

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 Ответ

2 голосов
/ 05 июля 2019

В вашем паттерне у вас было несколько ошибок. Прежде всего 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);
...