Как разобрать строку, содержащую дату и часовой пояс, в DateTime - PullRequest
0 голосов
/ 17 октября 2018

У меня есть такая строка, которая может быть отформатирована следующим образом (в зависимости от часового пояса, например):

"2018-10-17T15: 33: 15 UTC"

"2018-10-17T17: 03: 00 Европа / Прага

"2018-10-18T12: 00: 00 Америка / Кентукки / Монтиселло"

Таким образом, эти строки содержат идентификатор зоны вконец

Как разобрать такие строки в datetime?

Что я пробовал:

val dateString = "2018-10-18T12:00:00 America/Kentucky/Monticello"

    ISODateTimeFormat
    .dateTimeParser()
    .parseDateTime(dateString)

ОБНОВЛЕНИЕ:

Я также пробовал:

val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss zzzz")


val parsed: Date = simpleDateFormat.parse(dateString)

Но его невозможно проанализировать

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете создать свой собственный DateTimeFormatter:

val date1 = "2018-10-17T15:33:15 UTC"
val date2 = "2018-10-17T17:03:00 Europe/Prague"
val date3 = "2018-10-18T12:00:00 America/Kentucky/Monticello"

//with JDK
val formatter = java.time.format.DateTimeFormatterBuilder()
    .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
    .optionalStart()
    .appendLiteral(' ')
    .parseCaseSensitive()
    .appendZoneRegionId()
    .toFormatter();
println(ZonedDateTime.parse(date1, formatter))
println(ZonedDateTime.parse(date2, formatter))
println(ZonedDateTime.parse(date3, formatter))

//With Joda Time
val jodaFormatter = org.joda.time.format.DateTimeFormatterBuilder()
    .appendPattern("yyyy-MM-dd'T'HH:mm:ss ZZZ").toFormatter()
println(jodaFormatter.parseDateTime(date1))
println(jodaFormatter.parseDateTime(date2))
println(jodaFormatter.parseDateTime(date3))

Этот форматер может анализировать только «Европа / Прага», но не «Европа / Прага».Вы можете найти все идентификаторы поддерживаемых зон здесь: https://www.mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/

...