我正在使用字符串模板创建电子邮件,但是当我打印出日期时,它会打印出完整日期(例如,2010 年 4 月 28 日星期三 10:51:37 BST)。我想以 dd/mm/yyyy 格式打印出来,但不知道如何在 .st 文件中进行格式化。
我无法单独修改日期(使用 java 的 simpleDateFormatter),因为我遍历了带有日期的对象集合。
有没有办法在 .st 电子邮件模板中格式化日期?
我正在使用字符串模板创建电子邮件,但是当我打印出日期时,它会打印出完整日期(例如,2010 年 4 月 28 日星期三 10:51:37 BST)。我想以 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渲染器文档中 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();
为格式映射提供的选项如下:
或者,您可以使用如下自定义格式:
foo(right_now) ::= << <right_now; format="MM/dd/yyyy"> >>
您可以在此处查看DateRenderer Java 源代码中的这些选项和其他详细信息
设置日期格式时一个非常重要的事实是使用“MM”而不是“mm”来表示月份。“mm”是用来表示分钟的。使用“mm”而不是“MM”通常会引入难以发现的错误。