Модель Freemarker преобразует метку времени в миллисекундах в дату
У меня есть csv-файл, который я хочу преобразовать с помощью fmpp (freemarker). Первый столбец-это длинное значение (миллисекунды с 1.1.1970), которое я хочу преобразовать в дату и отформатировать его как datetime.
Формат Src:
timeStamp,elapsed,label,responseCode,threadName,dataType,success,bytes,URL,Latency
1319115474244,40142,Login,200,Login 1-2,text,true,862184,http://localhost:8080/xxx,5378
Желаемый целевой формат:
timeStamp;elapsed;label;responseCode;threadName;dataType;success;bytes;URL;Latency
20.12.2011 13:45;40142;Login;200;Login 1-2;text;true;862184;http://localhost:8080/xxx;5378
Мой (запущенный) шаблон:
<#list csv.headers as h>${h}<#if h_has_next>;</#if></#list>
<#list csv as row>
<#list csv.headers as h><#if h_index == 0>Do the date magic<#else>${(row[h]!"N/A")?string}</#if>$<#if h_has_next>;</#if></#list>
</#list>
Для столбца 0 я хочу выполнить преобразование. Я не хочу писать новую модель, которая содержит дату. Мой вопрос в том, можно ли это сделать в шаблоне без изменения freemarker или fmpp.
Есть идеи?
2 ответов:
FreeMarker 2.3.17 ввел
?number_to_date,?number_to_timeи?number_to_datetimeза это. Смотрите: http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_numToDateВы также захотите задать формат даты/времени и зону; см. http://fmpp.sourceforge.net/settings.html#sect17
Возможно, вам придется обновить FreeMarker в FMPP. Для этого просто замените
<FMPP_HOME>/lib/freemarker.jarна последнюю версию.
В моей ситуации я использую это:
${(timeStamp)? number_to_date? string ("yyyy. MM. dd")}
И заменить
number_to_dateнаnumber_to_datetimeилиnumber_to_time;И вы можете заменить
yyyy.MM.ddнаYYYY-MM-dd HH:mm:ssпо мере необходимости.Проверьте это: http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_numToDate
Comments