最近需要把“20121010”转换为“2012-10-10”格式,直接用Convert.ToDateTime("20121010"),系统报错“未被识别的DateTime类型”。
解决方法:
一、DateTime.ParseExact
string str = "20121010";
IFormatProvider ifp = new CultureInfo("zh-CN", true);
DateTime dt = DateTime.ParseExact(str, "yyyyMMdd", ifp);
MessageBox.Show(dt.ToString("yyyy-MM-dd"));
二、DateTime.TryParseExact
string str = "20121010";
DateTime dt;
IFormatProvider ifp = new CultureInfo("zh-CN", true);
if (DateTime.TryParseExact(str, "yyyyMMdd", ifp, DateTimeStyles.None, out dt))
{
MessageBox.Show(dt.ToString(("yyyy-MM-dd"));
}
在C#中如果将一个字符串类型的日期转换成日期类型很方便的
即使用Convert.ToDateTime("2015/01/01").ToString()或DateTime.TryParse 可完成转换,前提是字符串里的格式必须是系统可以识别的日期格式
如:
yyyy-MM-dd
yyyy/MM/dd
等等....
如果字符串中的格式是自定义的话(yyyyMMdd),那么系统的方法就无法直接完成转换(虽然字符串的内容是日期,如20111021)
还好C#提供了强大的可自定义格式转换功能,可以完成自定义需求,不废话直接上代码 在线Demo


1/****************************************************************** 2 * 创建人:HTL 3 * 创建时间:2015-04-08 15:36:35 4 * 说明:C# 使用DateTime.TryParseExact将字符串的自定义日期格式转换成日期类型 5 * DEMO Url:http://ideone.com/I6MuaZ 6 * Email:huangyuan413026@163.com 7 *******************************************************************/ 8using System; 9public class DateTime_TryParseExact_Demo 10{ 11 public static void Main() 12 { 13 string str = DateTime.Now.ToString("yyyyMMdd"); 14 string[] format = {"yyyyMMdd"}; 15 DateTime date; 16 if (DateTime.TryParseExact(str, 17 format, 18 System.Globalization.CultureInfo.InvariantCulture, 19 System.Globalization.DateTimeStyles.None, 20 out date)) 21 { 22 Console.WriteLine("Custom DateTime Type Convert success:"+date.ToString()); 23 } 24 else 25 Console.WriteLine("Custom DateTime Type Convert error "); 26 }//end Main 27}//end

有图有真相:

参考:
MSDN:DateTime.TryParseExact 方法
Stack Overflow:Convert YYYYMMDD string date to a datetime value [duplicate]