Почему эта строка даты не проходит проверку?

У меня есть файл JSON со значением 2020-03-07T04:11:20.000 для поля с заданным шаблономyyyy-MM-dd'T'HH:mm:ss.SSS. Я попытался добавить Z в конце, но проверка все равно не проходит. Есть идеи, почему?

Я попытался выполнитьOffsetDateTime.parse(mytext, DateTimeFormatter.ofPattern(mypattern)), и он выбросил исключение DateTimeParseException с невозможностью получить OffsetDateTime от TemporalAccessor

2 ответа

Решение

Поскольку ни шаблон, ни вход не имеют смещения часового пояса, вы не можете проанализировать его напрямую, чтобы OffsetDateTime. Что вы можете сделать, так это проанализировать дату какLocalDateTime и добавьте смещение к результату.

Например, используя ZoneOffset.UTC:

LocalDateTime ldt = LocalDateTime.parse(mytext, DateTimeFormatter.ofPattern(mypattern));
OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC)

Во-первых, вы используете неправильный класс, OffsetDateTimeдля вашего случая. Поскольку вы упомянулиtimezone="UTC", вы должны использовать ZonedDateTime. Обратите внимание, что после использования следующей аннотации созданная дата и время будет иметь вид2020-03-07T04:11:20.000 UTC.

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS z", timezone="UTC")

который вы можете разобрать в ZonedDateTime используя узор, yyyy-MM-dd'T'HH:mm:ss.SSS z.

Демо:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        String myPattern = "yyyy-MM-dd'T'HH:mm:ss.SSS z";
        String myText = "2020-03-07T04:11:20.000 UTC";
        System.out.println(ZonedDateTime.parse(myText, DateTimeFormatter.ofPattern(myPattern)));
    }
}

Выход:

2020-03-07T04:11:20Z[UTC]

Если вы хотите сохранить формат даты и времени как 2020-03-07T04:11:20.000 тогда вы должны удалить timezone="UTC" из аннотации и проанализируйте полученную строку даты и времени в LocalDateTime вместо того ZonedDateTime. Излишне говорить, что узор должен бытьyyyy-MM-dd'T'HH:mm:ss.SSS в таком случае.

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