2013-11-06 5 views
1

У меня есть требование, чтобы преобразовать время даты UTC в дату даты JST в шаблоне бесплатного маркера, может ли кто-нибудь, пожалуйста, назовите, как это сделать.конвертировать UTC datetime в JST datetime в freemarker tempate

Я использую smooks с комбинацией freemarker.

Благодарим вас за предложения.

+0

Является ли ваш dateTime экземпляром 'java.util.Date'? Что вы уже пробовали? Пожалуйста, опубликуйте FTL, который не работает для вас. –

ответ

3

У 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 
+0

спасибо dekany, он отлично работает. – Ananth

0

документация имеет целый раздел, посвященные даты и функции для iso_ http://freemarker.org/docs/ref_builtins_date.html

Однако, документация не относится к тому, что вы можете объединить методы вместе. Хотя это подразумевается с freemarker. Например:

«2013-11-09T16: 34: 00Z»? Datetime? Iso_local, который принимает строку в формате UTC, преобразует ее в datetime, а затем распечатывает с локальными настройками.

Смежные вопросы