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

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

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

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

使用这样的其他渲染器:

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"$ 

它应该工作

这是一个基本的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(); 

StringTemplate 4包含一个DateRenderer类。

下面的示例是Java中Renderers文档中 NumberRenderer的修改版本

 String template = "foo(right_now) ::= <<  >>\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
  • “long”=> DateFormat.LONG
  • “full”=> DateFormat.FULL

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

 foo(right_now) ::= <<  >> 

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

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