Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串模板电子邮件中设置日期格式_Java_Email_Date_Formatting_Stringtemplate - Fatal编程技术网

Java 在字符串模板电子邮件中设置日期格式

Java 在字符串模板电子邮件中设置日期格式,java,email,date,formatting,stringtemplate,Java,Email,Date,Formatting,Stringtemplate,我正在使用字符串模板创建电子邮件,但当我打印出日期时,它会打印出完整日期(例如,Wed Apr 28 10:51:37 BST 2010)。我想以dd/mm/yyyy格式打印出来,但不知道如何在.st文件中格式化 我不能单独修改日期(使用java的SimpleDataFormatter),因为我迭代了一组带有日期的对象 是否有方法格式化.st电子邮件模板中的日期?使用以下其他渲染器: internal class AdvancedDateTimeRenderer : IAttributeRend

我正在使用字符串模板创建电子邮件,但当我打印出日期时,它会打印出完整日期(例如,Wed Apr 28 10:51:37 BST 2010)。我想以dd/mm/yyyy格式打印出来,但不知道如何在.st文件中格式化

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


是否有方法格式化.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"$

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

这里是一个基本的Java示例,有关更多信息,请参阅

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的修改版本

字符串模板=
“foo(现在):=>\n”;
STGroup g=新的STGroupString(模板);
g、 registerRenderer(Date.class,new DateRenderer());
ST=group.getInstanceOf(“foo”);
st.add(“立即”,新日期());
字符串结果=st.render();
提供的格式映射选项如下:

  • “short”=>DateFormat.short(默认值)
  • “medium”=>DateFormat.medium
  • “long”=>DateFormat.long
  • “full”=>DateFormat.full
或者,您可以使用如下自定义格式:

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

您可以在DateRenderer Java源代码上看到这些选项和其他详细信息

我不知道为什么不能使用SimpleDataFormatter-如果您正在将对象写入文本文件,您不是在某个级别上迭代对象吗?
foo(right_now) ::= << <right_now; format="MM/dd/yyyy"> >>