C# 字符串string類型轉換成DateTime類型 或者 string轉換成DateTime?(字符串轉換成可空日期類型)


在c#中,string類型轉換成DateTime類型是經常用到的,作為基本的知識,這里在此做個小結。一般來說可以使用多種方法進行轉換,最常用的就是使用Convert.ToDateTime(string value)方法進行轉換。


首先介紹最常用的Convert.ToDateTime方法,然后在說明其他的方法。下面這段代碼是最常見的轉換代碼:

   //將含有正確日期格式的string類型轉換成DateTime類型
    string strDate = "2014-08-01";
    DateTime dt1 = Convert.ToDateTime(strDate);
    //將包含時分秒的string類型日期轉換成DateTime類型
    string strDateTime = "2014-08-01 10:57:31";
    DateTime dt2 = Convert.ToDateTime(strDateTime);

  

C#的類型轉換還是十分方便的,這里要注意的是,傳入的string類型的日期格式必須要正確,否則會跳出異常錯誤信息:該字符串未被識別為有效的 DateTime。正確的日期格式為 yyyy-MM-dd HH:mm:ss (2014-08-01 11:25:20)或者 yyyy/MM/dd HH:mm:ss (2014-08-01 11:25:20),還有其他格式這里就不列舉了,網上搜索下C#日期格式就有了,這里提供下微軟的MSDN官方文檔

這里是轉換方法的文檔說明:

        // 摘要: 
        //     將日期和時間的指定字符串表示形式轉換為等效的日期和時間值。
        //
        // 參數: 
        //   value:
        //     日期和時間的字符串表示形式。
        //
        // 返回結果: 
        //     value 的值的日期和時間等效項,如果 value 為 null
        // ,則為 System.DateTime.MinValue 的日期和時間等效項。
        //
        // 異常: 
        //   System.FormatException:
        //     value 不是格式正確的日期和時間字符串。
        public static DateTime ToDateTime(string value);

  這里在介紹下其他的轉換方法,我們還可以使用DateTime.Parse,DateTime.TryParse,DateTime.ParseExact和DateTime.TryParseExact這四個方法進行轉換。

    /*聲明要轉換的日期格式字符串*/
    string strDateTime = "2014-08-01 13:52:05";

    /*使用DateTime.Parse方法進行轉換*/
    DateTime dt1 = DateTime.Parse(strDateTime);

    /*
     * 使用TryParse方法進行轉換             
     * 如果日期格式不正確則返回空值
     * 轉換后的值自動賦值給傳入的out形參dt2中
     */
    DateTime dt2;
    DateTime.TryParse(strDateTime, out dt2);

    /*
     * 使用ParseExact方法進行轉換
     * 這里需要帶入要轉換的日期格式參數
     * 這里的日期格式可以自定義,比如yyyyMMddHHmmss,就可以傳入20140801135205進行轉換
     * 第三個參數是區域性特定格式信息,這里使用當前系統默認區域(即中國)             
     */
    DateTime dt3=DateTime.ParseExact(strDateTime,"yyyy-MM-dd HH:mm:ss",System.Globalization.CultureInfo.CurrentCulture);

    /*
     * 使用TryParseExact方法進行轉換
     * 基本用法和大致參數ParseExact方法一樣
     * 只是傳入返回值的DateTime類型的out形參,這里是dt4
     * 第四個參數為:格式設置選項,既DateTimeStyles枚舉,設置NONE即可
     */
    DateTime dt4;
    DateTime.TryParseExact(strDateTime, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dt4);

  這里要注意的是,如果是用Parse方法也是需要注意傳入正確的日期格式,否則會有錯誤異常。但是如果使用TryParse方法則不用擔心,錯誤的格式只會返回null空的DateTime類型回來。ParseExact和TryParseExact則是根據你傳入的日期格式進行轉換,這里可轉換任意的日期格式,具體轉換其他格式的日期字符串的內容。

 

最近項目中遇到以前一直困擾的問題,就是如何將string轉換成DateTime?這種可空日期類型。以前總是通過編寫一堆邏輯代碼來進行轉換,但是寫這些代碼感覺非常繁瑣。后在網上瀏覽相關資料,使用NullableConverter類就可以輕松的進行轉換。

以下是測試的部分代碼,代碼在控制台應用程序中運行:

/* 測試string類型轉換成DateTime?類型*/ 
/*NullableConverter類構造函數必須傳入要轉換的類型*/

System.ComponentModel.NullableConverter nullableDateTime = new System.ComponentModel.NullableConverter(typeof(DateTime?));

/*
*正常日期格式字符串轉換為DateTime?
*/
string strDate = DateTime.Now.ToString();
DateTime? dt1=(DateTime?)nullableDateTime.ConvertFromString(strDate);
Console.WriteLine("正常日期格式字符串轉換成DateTime?:{0}", dt1);

/*
*字符串為空白轉換為DateTime?
*/
strDate = string.Empty;
DateTime? dt2 = (DateTime?)nullableDateTime.ConvertFromString(strDate);
Console.WriteLine("空白字符串轉換成DateTime?:{0}", dt2);

/*
*字符串為NULL轉換為DateTime?
*/
strDate = null;
DateTime? dt3 = (DateTime?)nullableDateTime.ConvertFromString(strDate);
Console.WriteLine("NULL字符串轉換成DateTime?:{0}", dt3); 
Console.Read();

  

輸出的結果是:字符串轉換可控日期類型結果圖

總結果上看可以順利將空字符串和正常的字符串轉換成DateTime?類型,但是如果傳入非法的日期格式的字符串會報錯,需要另外處理。

NullableConverter類主要提供可空類型與其基礎基元類型間的自動轉換。關於NullableConverter類的具體說明,可在網絡上找到大量的資料,這里就不再敘述。這里是MSDN的描述:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.nullableconverter(v=vs.85).aspx

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM