Столкнувшись с проблемой при чтении даты и времени в java из excel, преобразовав дату в формат строки, а затем проанализировав ее

Попытка сохранить дату и время из excel в сеттер, используя poi и LocalDateTime и DateTimeFormatter.

    DateTimeFormatter format=DateTimeFormatter.ofPattern("MM/dd/yyyy hh:mm:ss");
    LocalDateTime 
    dateObj=LocalDateTime.parse(row.getCell(2).getLocalDateTimeCellValue().toString(),format);
    dto.setDate(dateObj);

Результат:

    java.time.format.DateTimeParseException: Text '2023-01-22T00:00' could not be parsed at index 2

Пожалуйста, посоветуйте мне, что делать? В файле excel дата хранится в 22.01.2023 00:00:00.

Что делает .getLocalDateTimeCellValue()? Какой тип возврата? Если вы получаете LocalDateTime от .getLocalDateTimeCellValue(), то то, что вы пытаетесь сделать, не имеет никакого смысла.

Serg Vasylchak 18.01.2023 19:22

getLocalDateTimeCellValue() возвращает объект LocalDateTime из значения ячейки excel

Tathagata Dasgupta 18.01.2023 19:25

То, что вы пытаетесь сделать, не имеет никакого смысла, если dto#date имеет тип LocalDateTime. LocalDateTime не сохраняет какой-либо предпочтительный формат, а сохраняет только значение (LocalDate и LocalTime). Когда вы делаете .getLocalDateTimeCellValue().toString(), вы в основном преобразуете LocalDateTime в String с помощью средства форматирования ISO по умолчанию, а затем снова пытаетесь преобразовать его в LocalDateTime.

Serg Vasylchak 18.01.2023 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете DateTimeFormatter не по назначению. Вместо форматирования объекта LocalDateTime вы пытаетесь без необходимости проанализировать строку. Вам нужен форматированный String, который вы можете сделать следующим образом:

LocalDateTime dateObj = row.getCell(2).getLocalDateTimeCellValue();
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss", Locale.ENGLISH);
String formatted = dateObj.format(format);

Узнайте больше о современном API Date-Time из Trail: Date Time.

Я хочу сохранить его в формате MM/dd/yyyy hh:mm:ss в объекте класса pojo, так же, как данные excel

Tathagata Dasgupta 18.01.2023 19:27

@TathagataDasgupta - сначала я запутался, думая, что вы хотите проанализировать строку. Я обновил свой ответ в соответствии с вашим требованием.

Arvind Kumar Avinash 18.01.2023 19:32

@TathagataDasgupta Нет, нет. Вы хотите использовать правильный тип данных в своем POJO, то есть LocalDateTime. Вы хотите отформатировать его в своем пользовательском интерфейсе, а не в своей модели данных.

Ole V.V. 18.01.2023 19:32

Другие вопросы по теме