我使用字符串模板創建了一封電子郵件,但是當我打印出一個日期時,它會打印出完整的日期(例如。Wed Apr 28 10:51:37 BST 2010)。我想以dd/mm/yyyy格式打印出來,但不知道如何在.st文件中對其進行格式化。在字符串模板中格式化日期電子郵件
我不能單獨修改(使用Java的simpleDateFormatter),因爲我遍歷的日期對象的集合的日期。
有沒有辦法在.st電子郵件模板中格式化日期?
我使用字符串模板創建了一封電子郵件,但是當我打印出一個日期時,它會打印出完整的日期(例如。Wed Apr 28 10:51:37 BST 2010)。我想以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"$
它應該工作
優秀!謝謝! – Ger 2010-05-04 14:35:48
設定日期格式的一個非常重要的事實是在月份使用「MM」而不是「mm」。 「mm」用於分鐘。使用「mm」而不是「MM」通常會引入難以發現的錯誤。
這是一個基本的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();
StringTemplate 4包含一個DateRenderer類。
我的以下實例是NumberRenderer對documentation on Renderers修改版本在Java進行格式映射作爲這樣
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源上here
我不確定我是否明白爲什麼你不能使用simpleDateFormatter - 如果你要將對象寫入文本文件,是不是在迭代某個層次的對象? – Quotidian 2010-04-28 13:17:52