2011-10-21 50 views
4

私はfmpp(freemarker)で変換したいcsvファイルを持っています。最初の列は、日付に変換してdatetimeとしてフォーマットしたいlong値(1.1.1970からのミリ秒)です。Freemarkerモデルは、ミリ秒単位でタイムスタンプを変換します

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 

私の(ランニング)テンプレート:列0の場合

<#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> 

私は、変換をしたいです。私は、日付を含む新しいモデルを書いてはいけません。私の質問は、freemarkerやfmppを変更することなくテンプレートでこれを行うことができるということです。

答えて

19

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

Mayble FMPPでFreeMarkerをアップグレードする必要があります。そのためには<FMPP_HOME>/lib/freemarker.jarを最新バージョンに置き換えてください。私の状況で

+2

ありがとう:この

チェック!私はドキュメンテーションでこれを監督したに違いありません。他の人へのヒント。文字列を最初に数値に変換し、次に$ {(row [h])?number?number_to_datetime}のようなdatetimeに変換する必要があります。出力用のdatetime形式は、次のように設定できます。<#setting datetime_format = "yyyy-MM-dd hh:mm:ss"> – Andreas

1

、私はこれを使用します。

$ {?(timeStampに)number_to_date文字列( "YYYY.MM.DD")}

そしてnumber_to_datetimeまたはnumber_to_timenumber_to_dateを置き換えます;

yyyy.MM.ddは、必要に応じてYYYY-MM-dd HH:mm:ssに置き換えることができます。 http://freemarker.org/docs/ref_builtins_expert.html#ref_builtin_numToDate

関連する問題