Freemarker преобразует метку времени в миллисекундах в дату с часовым поясом

#freemarker #datetime-format

Вопрос:

Я могу конвертировать миллисекунды в дату, используя формат ниже:

 ${createdTime?number_to_datetime?string("yyyy-MM-dd HH:mm:ss")}
 

Выход есть: 2021-07-22 11:02:38

Теперь я хочу добавить к нему часовой пояс Asia/Colombo , есть ли способ добавить часовой пояс в number_to_datetime формат freemarker?

Ответ №1:

Начиная с 2.3.31, вы не можете напрямую передать часовой пояс ?string . (Вы можете ?iso(timeZone) , и его друзья, но те выводят только в формате ISO.)

Но вы можете изменить часовой пояс с <#setting time_zone='Asia/Colombo'> помощью . После этого все будет отформатировано в этом часовом поясе (я имею в виду, во время выполнения одного и того же шаблона верхнего уровня). Хотя это, вероятно, нежелательно, и вы хотите изменить его обратно на то, что было. В таком случае идея заключается в следующем:

 <#macro withTimeZone tz>
  <#local lastTZ = .time_zone>
  <#setting time_zone = tz>
  <#nested>
  <#setting time_zone = lastTZ>
</#macro>
 

Так что теперь вы можете сделать это:

 <@withTimeZone "Asia/Colombo">${.now?string('yyyy-MM-dd HH:mm:ss')}</@>
 

Конечно, вы также могли бы окружить этим раздел шаблона большего размера.

Обратите внимание, что это .time_zone было добавлено в FreeMarker 2.3.31.

Комментарии:

1. Спасибо, проверю это и вернусь