Как отобразить дату и время как местное время без часового пояса в конце? - PullRequest
2 голосов
/ 11 июля 2019

РЕДАКТИРОВАТЬ: Из-за некоторой кажущейся путаницы, позвольте мне уточнить.Если это вообще возможно, я хочу, чтобы решение было сделано в freemarker, а не в java.

У меня есть строка даты и времени, которая выглядит следующим образом: 2019-03-12T16:02:00+02:00 Я должен показать это в определенном формате, например: EEEE dd. MMMM yyyy HH:mm Однако, если я делаю это так, время отображается как 14:02 вместо 16:02.Он преобразует дату и время в UTC, а затем отображает его.Как сделать так, чтобы часы и минуты отображались как есть, просто без "utc" в конце?Или любой часовой пояс в этом отношении.Tuesday 12. March 2019 16:02 является желаемым выходом.

Я не знаю часовой пояс получателя.

Использование iso_local_nz дает мне американский стандартный дисплей, который все еще неверен.

Заранее спасибо.

Я попробовал почти все, что могу придумать здесь: https://freemarker.apache.org/docs/ref_builtins_date.html#ref_builtin_date_iso.

departureScheduled?datetime.iso?string("EEEE dd. MMMM yyyy HH:mmz")?capitalize

Я использую следующую конфигурацию:

config = new Configuration(Configuration.VERSION_2_3_28);
config.setTemplateLoader(new S3TemplateLoader());
config.setDefaultEncoding("UTF-8");
config.setLocalizedLookup(false);
config.setLocale(Locale.forLanguageTag("NO"));
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);

Вводимая строка - это строка, которую я предоставил выше.

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Это далеко не хорошее решение, но оно работает для одного моего случая, когда время, которое я хочу показать, находится в исходной строке до ее анализа.

departureScheduled?keep_before("+")?datetime.iso?string("EEEE dd. MMMM yyyy HH:mm")?capitalize

Обратите внимание на keep_before("+").

Приведенное выше решение работает путем удаления всего, что находится после + в 2019-03-12T16:02:00+02:00.Затем анализатор даты и времени предполагает, что время указано в UTC.Таким образом, я избегаю всей проблемы, вместо этого используя встроенную функцию манипуляции со строками, которая возвращает подстроку, которая больше не будет изменяться: 2019-03-12T16:02:00(+00:00).Скобка показывает, как это интерпретируется.

Если у кого-то есть лучший ответ, я отмечу его как правильный, но через несколько дней, если ответ не был дан, я отмечу его как правильный для любого, у кого может быть такая же проблема.

0 голосов
/ 11 июля 2019

Используйте класс java.time.OffsetDateTime для обработки смещения:

public static void main(String[] args) {
    String t = "2019-03-12T16:02:00+02:00";
    OffsetDateTime odt = OffsetDateTime.parse(t);
    System.out.println(odt.format(DateTimeFormatter.ofPattern("EEEE dd. MMMM yyyy HH:mm")));
}

Это печатает Dienstag 12. März 2019 16:02, перевод зависит от вашей системы по умолчанию Locale.

Обратите внимание, что требуемый вывод не будет получен с помощью правильного кода, потому что 12 марта 2019 года было вторником, а не понедельником.

...