Формат даты в электронном письме String Template - PullRequest
7 голосов
/ 28 апреля 2010

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

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

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

Ответы [ 4 ]

8 голосов
/ 28 апреля 2010

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

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

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

2 голосов
/ 29 апреля 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();
1 голос
/ 06 марта 2012

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

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

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

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

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

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

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

0 голосов
/ 28 апреля 2010

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

...