У FreeMarker есть настройка time_zone
, и она автоматически отображает Java Date
-s в этом часовом поясе. Если он не установлен правильно в вашей среде, вы можете заставить его в шаблоне, например, <#setting time_zone="JST">
, но это отвратительно.
Если это время-дата UTC входит в строку, тогда сначала вы должны сказать FreeMarker разбор этой строки как дату-дату с чем-то вроде myUTCDate?datetime('yyyy-MM-dd HH:mm:ss')
; Я не знаю, каков точный шаблон в вашем случае. Но если он не включает часовой пояс, у вас здесь немного проблем, так как он будет интерпретироваться в часовом поясе JST
. В этом случае вы можете сделать (myUTCDate + ' UTC')?datetime('yyyy-MM-dd HH:mm:ss z')
. И, конечно, если вы сделаете это много, лучше поместите этот беспорядок в #function
.
Update: Был ошибка в моем оригинальный ответ: он использовал hh
, что означает 0-12 часов без a
. Я изменил это на HH
, что составляет 0-23 часа. Также вот тесты, которые я сделал. Прекрасно работает для меня:
<#setting time_zone='JST'>
<#setting datetime_format='yyyy-MM-dd HH:mm:ss'>
Current time (Java Date object):
Local time non-ISO: ${.now}
UTC ISO: ${.now?iso_utc}
Local ISO: ${.now?iso_local}
Local ISO without zone: ${.now?iso_local_nz}
<#assign myUTCDate = '2010-05-15 10:00:00'>
Interperted as local, printed as local: ${myUTCDate?datetime}
Interperted as UTC, printed as local: ${(myUTCDate + ' UTC')?datetime('yyyy-MM-dd HH:mm:ss z')}
который печатает:
Current time (Java Date object):
Local time non-ISO: 2013-11-10 01:34:00
UTC ISO: 2013-11-09T16:34:00Z
Local ISO: 2013-11-10T01:34:00+09:00
Local ISO without zone: 2013-11-10T01:34:00
Interperted as local, printed as local: 2010-05-15 10:00:00
Interperted as UTC, printed as local: 2010-05-15 19:00:00
Является ли ваш dateTime экземпляром 'java.util.Date'? Что вы уже пробовали? Пожалуйста, опубликуйте FTL, который не работает для вас. –