Я создаю электронное письмо с помощью Строкового Шаблона, но когда я распечатываю дату, он распечатывает полную дату (например, среда 28 апреля 10:51:37 BST 2010). Я хотел бы распечатать его в формате dd/mm/yyyy, но не знаю, как отформатировать это в .st файле.
Я не могу изменить дату индивидуально (использующий simpleDateFormatter Java), потому что я выполняю итерации по набору объектов с датами.
Существует ли способ отформатировать дату в .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();