7

我正在使用字符串模板创建电子邮件,但是当我打印出日期时,它会打印出完整日期(例如,2010 年 4 月 28 日星期三 10:51:37 BST)。我想以 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 类。

我下面的示例是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();

为格式映射提供的选项如下:

  • “短” => DateFormat.SHORT(默认)
  • “中” => DateFormat.MEDIUM
  • “长” => DateFormat.LONG
  • “完整” => DateFormat.FULL

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

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

您可以在此处查看DateRenderer Java 源代码中的这些选项和其他详细信息

于 2012-03-05T20:53:49.150 回答
0

设置日期格式时一个非常重要的事实是使用“MM”而不是“mm”来表示月份。“mm”是用来表示分钟的。使用“mm”而不是“MM”通常会引入难以发现的错误。

于 2010-04-28T13:17:31.747 回答