字符串模板电子邮件格式化日期

时间:2010-04-28 10:30:06

标签: java email date formatting stringtemplate

我正在使用字符串模板创建一个电子邮件,但是当我打印出日期时,它会打印出完整的日期(例如,2010年4月28日星期三,太平洋时间2010年10月51日)。我想以dd / mm / yyyy格式打印出来,但不知道如何在.st文件中格式化它。

我不能单独修改日期(使用java的simpleDateFormatter),因为我迭代了一组带日期的对象。

有没有办法在.st电子邮件模板中格式化日期?

4 个答案:

答案 0 :(得分: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"$

它应该有用

答案 1 :(得分:2)

以下是一个基本的Java示例,有关详细信息,请参阅StringTemplate documentation on Object Rendering

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();

答案 2 :(得分:1)

StringTemplate 4包含一个DateRenderer类。

以下示例是Java中documentation on Renderers上的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”=&gt; DateFormat.SHORT(默认)
  • “medium”=&gt; DateFormat.MEDIUM
  • “long”=&gt; DateFormat.LONG
  • “full”=&gt; DateFormat.FULL

或者,您可以使用如下自定义格式:

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

您可以在DateRenderer Java源here

上看到这些选项和其他详细信息

答案 3 :(得分:0)

设置日期格式时,一个非常重要的事实是使用“MM”而不是“mm”表示月份。 “mm”意味着用了几分钟。使用“mm”而不是“MM”通常会引入很难找到的错误。

相关问题