asp.net中StringTemplate自訂輸出日期格式

來源:互聯網
上載者:User

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分]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.