asp.net中StringTemplate自定义输出日期格式

Use additional renderers like this实现接口的类:

 代码如下 复制代码
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);
    }
}

and then add this to your StringTemplate such as把类注册到模板组中:

 代码如下 复制代码
var stg = new StringTemplateGroup("Templates", path);
stg.RegisterAttributeRenderer(typeof(DateTime), new AdvancedDateTimeRenderer());

then in st file模板文件中的写法:

 代码如下 复制代码

$YourDateVariable; format="dd/mm/yyyy"$

另一种方法 默认都是调用attribute.ToString()方法。如果要自定义输出格式,则需要实现IAttributeRenderer接口。下面来定义一个自定义日期格式化输出:

 代码如下 复制代码

class CustomDataRenderer : IAttributeRenderer {
             
    public string ToString(object o)
    {
        if (o == null)
            return null;
         
        string str = o.ToString();
         
        DateTime dt;
        if (!DateTime.TryParse(o.ToString(), out dt))
            return str;
         
        return dt.ToString("yyyy年MM月dd日 HH点mm分");
    }
     
    public string ToString(object o, string formatName)
    {
        throw new NotImplementedException();
    }
}

使用:

 代码如下 复制代码

StringTemplate st = new StringTemplate("$d$");
st.RegisterRenderer(typeof(DateTime), new CustomDataRenderer());//在当前Template注册DateTime类型的默认输出格式
st.SetAttribute("d", DateTime.Now);
Console.WriteLine(st.ToString());

可以看到输出了前面定义的ToString(object o)方法定义的格式,那么如果需要输出多种格式,这个方法就显得力不从心了。

接下来改造CustomDataRenderer类,使它能输出多种格式:

 代码如下 复制代码

/// <summary>
/// 自定义ST日期格式输出
/// </summary>
class CustomDataRenderer : IAttributeRenderer {
     
    /// <summary>
    /// 默认的输出方法
    /// </summary>
    public string ToString(object o)
    {
        return ToString(o, null);
    }
     
    /// <summary>
    /// 指定输出格式时的输出方法
    /// </summary>
    /// <param name="formatName">格式名称</param>
    public string ToString(object o, string formatName)
    {
        if (o == null)
            return null;
         
        string str = o.ToString();
         
        DateTime dt;
        if (!DateTime.TryParse(o.ToString(), out dt))
            return str;
         
        switch (formatName) {
            case "CNDate":
                return dt.ToString("yyyy年MM月dd日");
            case "CNTime":
                return dt.ToString("HH点mm分");
            default :
                return dt.ToString("yyyy年MM月dd日 HH点mm分");
        }
    }
}

使用:

StringTemplate st = new StringTemplate("[$d1$] [$d2;format="CNDate"$] [$d3;format="CNTime"$]");
st.RegisterRenderer(typeof(DateTime), new CustomDataRenderer());//在当前Template注册DateTime类型的默认输出格式
st.SetAttribute("d1", DateTime.Now);
st.SetAttribute("d2", DateTime.Now);
st.SetAttribute("d3", DateTime.Now);
Console.WriteLine(st.ToString());

输出:[2010年04月30日 21点40分] [2010年04月30日] [21点40分]

时间: 2024-09-08 23:39:23

asp.net中StringTemplate自定义输出日期格式的相关文章

asp.net中页面格式化输出日期

最简单的在页面中的写法  代码如下 复制代码 %# Eval("Fenddate", "{0:yyyy/MM/dd}")%> 最初我是在程序页面中这样写的  代码如下 复制代码 string sDate = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + Date

Excel2013中单元格的日期格式如何自定义?

  老实说,Excel2013中定义的日期格式真的不少,中文的,数字的,英文的,还有星期啊,连日期与时间结合的都有,但格式虽然多,但如果没有我们想要的怎么办?譬如说,我们现在想要"某年某月某日 星期几"这种日期格式,要怎么办呢?很简单,系统没有的我们都可以自己定义的. 自定义的具体操作如下: 1.用Excel2013打开一篇工作表,选中我们需要修改日期格式的单元格,然后切换到"开始"选项卡的"单元格"组中,我们现在选择"格式"

ASP.NET中怎么控制E-Mail的格式?

问题描述 ASP.NET中怎么控制E-Mail的格式? 解决方案 解决方案二:是用正则表达式么?http://www.regexlab.com/zh/regref.htm解决方案三:用正则表达式.第一步:在工具箱中点验证工具栏再拖一个RegularExpressionValidator验证控件第二步:选中RegularExpressionValidator1右键属性,要设二个选项(1)ControlToValidate属性设要绑定的文本框ID(2)ValidationExpression属性设要

PHP中date()函数输出日期时间例子

PHP可以通过date() 函数来显示服务器日期和时间,下面详细了解一下如何使用date()函数来输出日期: php date() 函数详解 1,年-月-日  代码如下 复制代码 echo date('Y-m-j'); 2007-02-6 echo date('y-n-j'); 07-2-6 大写Y表示年四位数字,而小写y表示年的两位数字: 小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字.  代码如下 复制代码 echo date('Y-M-j'); 2007-Feb-6 ec

艾伟_转载:ASP.NET中写自定义的Config Provider

一.写作前题     我们用ASP.NET做项目开发的时候,配置Config文件那是经常的事情,VS.NET的Config文件提供了很多节,但是往往提供的这些配置信息还不能够完全满足我们的项目开发需求,而且微软正是考虑到这方面的因素,他允许用户自定义Configuration的相关配置内容.本文就此写了一些实例,希望对大家有所帮助.   二.本文内容   1.实现web.config中的自定义2.对自定义节的使用3.本文总结 三.实现Web.Config中自定义节     废话不多说,直接说主题

ASP.Net中保护自定义的服务器控件

自定义服务器控件是扩展 ASP.NET Web 服务器控件的功能的一种方式.下文提供了针对自定义服务器控件的用户和开发人员的基本安全准则.有关创建自定义服务器控件的更多信息,请参见开发自定义 ASP.NET 服务器控件. IDE(如 Microsoft Visual Studio 2005)简化了自定义控件的使用及开发.但是,无论使用哪一 IDE,下面列出的安全准则均适用. 有关 ASP.NET Web 应用程序安全性的常规信息,请参见 ASP.NET Web 应用程序安全性. 针对自定义服务器

javascript中处理时间戳为日期格式的方法

 本文为大家介绍下javascript中如何将时间戳处理为日期格式,下面有个不错的示例,感兴趣的朋友可以参考下 公共处理时间戳函数  代码如下: /**  * 处理时间戳转换成日期格式  * @param {Object} obj 时间戳{10位的时间戳需要乘以1000:13位的时间戳不需要}  * @return {TypeName} 返回日期格式 2013-09-16  */  function fullnum(obj){  if(Number(obj) < 10){  return '0'

ASP.NET中保护自定义的服务器控件_实用技巧

自定义服务器控件是扩展 ASP.NET Web 服务器控件的功能的一种方式.下文提供了针对自定义服务器控件的用户和开发人员的基本安全准则.有关创建自定义服务器控件的更多信息,请参见开发自定义 ASP.NET 服务器控件. IDE(如 Microsoft Visual Studio 2005)简化了自定义控件的使用及开发.但是,无论使用哪一 IDE,下面列出的安全准则均适用. 有关 ASP.NET Web 应用程序安全性的常规信息,请参见 ASP.NET Web 应用程序安全性. 针对自定义服务器

js中new date初始化日期格式要求

定义日期 Date 对象用于处理日期和时间. 可以通过 new 关键词来定义 Date 对象.以下代码定义了名为 myDate 的 Date 对象: var myDate=new Date() 注释:Date 对象自动使用当前的日期和时间作为其初始值. 需要注意最后一种形式,参数表示的是需要创建的时间和 GMT时间1970年1月1日之间相差的毫秒数.各种函数的含义如下: month:用英文 表示月份名称,从January到December mth:用整数表示月份,从(1月)到11(12月) dd