Дата формата в электронной почте шаблона String

Я создаю электронное письмо с помощью шаблона строки, но когда я распечатываю дату, она распечатывает полную дату (например, среда, 28 апреля, 10:51:37 BST 2010). Я хотел бы распечатать его в формате дд/мм/гггг, но не знаю, как отформатировать его в файле .st.

Я не могу изменить дату по отдельности (используя java simpleDateFormatter), потому что я перебираю коллекцию объектов с датами.

Есть ли способ отформатировать дату в шаблоне электронной почты .st?


person Gerard    schedule 28.04.2010    source источник
comment
Я не уверен, что понимаю, почему вы не можете использовать simpleDateFormatter - если вы записываете объекты в текстовый файл, разве вы все равно не перебираете объекты на каком-то уровне?   -  person Quotidian    schedule 28.04.2010


Ответы (4)


Используйте дополнительные рендереры, например:

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

он должен работать

person Genius    schedule 28.04.2010

Вот базовый пример 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();
person BenM    schedule 29.04.2010

StringTemplate 4 включает класс DateRenderer.

Мой пример ниже представляет собой модифицированную версию NumberRenderer из документации по средствам визуализации в 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();

Предоставленные параметры для форматирования карты как таковой:

  • "short" => DateFormat.SHORT (по умолчанию)
  • "средний" => DateFormat.MEDIUM
  • "long" => DateFormat.LONG
  • "полный" => DateFormat.FULL

Или вы можете использовать собственный формат, например:

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

Вы можете увидеть эти параметры и другие подробности в исходном коде Java DateRenderer здесь

person Frank Henard    schedule 05.03.2012

один очень важный факт при настройке формата даты - использовать «MM» вместо «mm» для месяца. "мм" предназначен для минут. Использование «мм» вместо «ММ» обычно приводит к ошибкам, которые трудно найти.

person Deep    schedule 28.04.2010