#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. Спасибо, проверю это и вернусь