Как конвертировать любую строку ISO8601 в LocalTime, используя js-joda?

У меня есть полная строка ISO8601, которая выглядит следующим образом: 1989-08-16T00:00:00.000Z, Как мне создать экземпляр LocalDate из него с помощью js-joda библиотека?

При попытке разобрать его напрямую с LocalDate.parse()Я получаю следующую ошибку:

DateTimeParseException: Text '1989-08-16T00:00:00.000Z' could not be parsed,
unparsed text found at index 10…

Я знаю, что могу легко разбить строку в T характер или разбери его с ванилью Date а затем создать LocalDate Исходя из этого, но есть ли более простой метод, который я могу использовать, чтобы легко проанализировать любую строку, совместимую с ISO8601, в LocalDate?

2 ответа

Решение

Сначала преобразуйте свою дату в объект Js Date, затем в объект LocalDate.

Date.parse преобразует строку ISO в миллисекунды, а затем преобразует ее в дату JS. В конце концов, используя объект Date JS, чтобы получить объект LocalDate.

var jsDate = new Date(Date.parse('1989-08-16T00:00:00.000Z')); //Iso Date string
var LocalDateObj = LocalDate.of(jsDate.getFullYear(), jsDate.getMonth() + 1, jsDate.getDate());

Строка ISO '1989-08-16T00:00:00.000Z' представляет собой метку времени UTC.

Вы можете разобрать это с соответствующим доменом js-joda Instant а затем преобразовать его в LocalDate, например.

let utcTimestamp = Instant.parse('1989-08-16T00:00:00.000Z')
let date = LocalDate.ofInstant(utcTimestamp)
Другие вопросы по тегам