7

文字列テンプレートを使用して電子メールを作成していますが、日付を印刷すると完全な日付が印刷されます (例: Wed Apr 28 10:51:37 BST 2010)。dd/mm/yyyy の形式で印刷したいのですが、.st ファイルでこれをフォーマットする方法がわかりません。

日付を持つオブジェクトのコレクションを反復処理するため、(Java の simpleDateFormatter を使用して) 日付を個別に変更することはできません。

.st 電子メール テンプレートで日付をフォーマットする方法はありますか?

4

4 に答える 4

8

次のような追加のレンダラーを使用します。

internal class AdvancedDateTimeRenderer : IAttributeRenderer
{
    public string ToString(object o)
    {
        return ToString(o, null);
    }

    public string ToString(object o, string formatName)
    {
        if (o == null)
            return null;

        if (string.IsNullOrEmpty(formatName))
            return o.ToString();

        DateTime dt = Convert.ToDateTime(o);

        return string.Format("{0:" + formatName + "}", dt);
    }
}

次に、これを次のようにStringTemplateに追加します。

var stg = new StringTemplateGroup("Templates", path);
stg.RegisterAttributeRenderer(typeof(DateTime), new AdvancedDateTimeRenderer());

次に、stファイルで:

$YourDateVariable; format="dd/mm/yyyy"$

動作するはずです

于 2010-04-28T13:11:30.193 に答える
2

これは基本的なJavaの例です。詳細については、オブジェクトレンダリングに関するStringTemplateのドキュメントを参照してください。

StringTemplate st = new StringTemplate("now = $now$");
st.setAttribute("now", new Date());
st.registerRenderer(Date.class, new AttributeRenderer(){
    public String toString(Object date) {
        SimpleDateFormat f = new SimpleDateFormat("dd/MM/yyyy");
        return f.format((Date) date);
    }
});
st.toString();
于 2010-04-29T09:02:46.860 に答える
1

StringTemplate 4 には DateRenderer クラスが含まれています。

以下の私の例は、 Renderers in Javaのドキュメントにある NumberRenderer の修正版です。

String template =
    "foo(right_now) ::= << <right_now; format=\"full\"> >>\n";


STGroup g = new STGroupString(template);
g.registerRenderer(Date.class, new DateRenderer());
ST st = group.getInstanceOf("foo");
st.add("right_now", new Date()); 
String result = st.render();

フォーマット マップとして提供されるオプションは次のとおりです。

  • "short" => DateFormat.SHORT (デフォルト)
  • "medium" => DateFormat.MEDIUM
  • "長い" => DateFormat.LONG
  • "full" => DateFormat.FULL

または、次のようなカスタム形式を使用できます。

foo(right_now) ::= << <right_now; format="MM/dd/yyyy"> >>

これらのオプションとその他の詳細については、ここの DateRenderer Java ソースを参照してください。

于 2012-03-05T20:53:49.150 に答える
0

日付形式を設定する際の非常に重要な事実の 1 つは、月に「mm」ではなく「MM」を使用することです。「mm」は分を表すためのものです。「MM」の代わりに「mm」を使用すると、非常に一般的に見つけにくいバグが発生します。

于 2010-04-28T13:17:31.747 に答える