在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
