DateTimeFormatter.format с континентом / городом - PullRequest
0 голосов
/ 06 июля 2018

В моей программе у меня есть дата и шаблон даты в текстовом файле, и шаблон используется с DateTimeFormatter для анализа / форматирования даты.

До недавнего времени моя дата выглядела так 01-01-18 00.00.00,00000000 +01:00, а шаблон даты - dd-MM-yy HH.mm.ss,SSSSSSSSS xxx. В начале моей программы я анализирую дату с шаблоном в ZonedDateTime, а в конце я форматирую другой ZonedDateTime и перезаписываю дату в текстовом файле, и они всегда должны быть в том же формате, который работал с этим шаблоном. .

Теперь я хочу изменить его на использование Europe/Berlin вместо +01:00, поэтому не будет неправильных вычислений, если CEST изменится на CET.

Итак, моя новая дата выглядит так 01-01-18 00.00.00,00000000 Europe/Berlin, а мой шаблон даты - dd-MM-yy HH.mm.ss,SSSSSSSSS z. Теперь анализ по-прежнему работает нормально, но когда я пытаюсь отформатировать мой ZonedDateTime, вывод всегда заканчивается на CEST вместо Europe/Berlin.

Теперь я хотел бы знать, есть ли способ реализовать это (желательно без хакерских обходных путей), чтобы отформатированная дата заканчивалась на Континенте / Городе.

1 Ответ

0 голосов
/ 06 июля 2018

Чтобы вывести часовой пояс как «Европа / Берлин», используйте VV буквы образца, например:

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS VV")
println(ZonedDateTime.now().format(formatter))
// 2018-07-05 23:12:06.901 Europe/Paris

Это также работает в обратном направлении:

val date = ZonedDateTime.parse("2018-07-05 12:00:01.123 Europe/Paris", formatter)
println(date)
// 2018-07-05T12:00:01.123+02:00[Europe/Paris]
...