На языке Java (или Котлин) Мне нужно преобразовать дату и время из формата гггг-мм-дд и чч:мм:сс в локальное время с использованием часового пояса

#java #date #datetime #kotlin #timezone

Вопрос:

Мне нужно преобразовать строки, поступающие из файла JSON, в форматы LocalDate и LocalTime, используя часовой пояс в качестве строки. Мне удалось преобразовать дату в локальную дату только с помощью метода LocalDate.ofInstant(Instant, ZoneId), но для этого требуется формат времени и даты , подобный этому 2021-05-21T10:17:55.539729Z , но строки, которые я получаю, приходят только в формате, как показано ниже (гггг-мм-дд и чч:мм:сс)

 {
"timeZone": "America/New_York",
"date": "2021-02-25",
"time": "13:00:00"
}
 

Ответ №1:

Вы можете просто преобразовать каждый из подкомпонентов в соответствующий java.time им объект, а затем объединить все в ZonedDateTime

 val jsonData = // your parsed json
val zone = ZoneId.of(jsonData.timeZone)
val time = LocalTime.parse(jsonData.time)
val date = LocalDate.parse(jsonData.date)
val zonedDateTime = ZonedDateTime.of(date, time, zone)

println(zonedDateTime) // 2021-02-25T13:00-05:00[America/New_York]