将string转换为DateTime

如何将string如2009-05-08 14:40:52,531转换为DateTime

由于您正在处理基于24小时的时间,并且用逗号分隔秒分数,所以build议您指定一个自定义格式:

 DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture); 

你基本上有两个select。 DateTime.Parse()DateTime.ParseExact()

首先在语法方面是非常宽容的,并且会以许多不同的格式来parsingdate。 用户input可能会有不同的格式。

ParseExact将允许您指定用于parsing的datestring的确切格式。 如果你的string总是使用相同的格式,那么使用这个很好。 这样,您可以轻松检测到与预期数据的偏差。

你可以像这样parsing用户input:

 DateTime enteredDate = DateTime.Parse(enteredString); 

如果你有一个特定的string格式,你应该使用另一种方法:

 DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null); 

"d"代表短date模式( 更多信息参见MSDN ), null指定当前文化应该用于parsingstring。

尝试这个

 DateTime myDate = DateTime.Parse(dateString); 

更好的方法是这样的:

 DateTime myDate; if (!DateTime.TryParse(dateString, out myDate)) { // handle parse failure } 

似乎没有人实施扩展方法。 在@ CMS的帮助下, 答案是 :

工作和改进的完整源代码示例在这里: Gist Link

 namespace ExtensionMethods { using System; using System.Globalization; public static class DateTimeExtensions { public static DateTime ToDateTime(this string s, string format = "ddMMyyyy", string cultureString = "tr-TR") { try { var r = DateTime.ParseExact( s: s, format: format, provider: CultureInfo.GetCultureInfo(cultureString)); return r; } catch (FormatException) { throw; } catch (CultureNotFoundException) { throw; // Given Culture is not supported culture } } public static DateTime ToDateTime(this string s, string format, CultureInfo culture) { try { var r = DateTime.ParseExact(s: s, format: format, provider: culture); return r; } catch (FormatException) { throw; } catch (CultureNotFoundException) { throw; // Given Culture is not supported culture } } } } namespace SO { using ExtensionMethods; using System; using System.Globalization; class Program { static void Main(string[] args) { var mydate = "29021996"; var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00} mydate = "2016 3"; date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00} mydate = "2016 12"; date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00} mydate = "2016/31/05 13:33"; date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00} mydate = "2016/31 Ocak"; date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00} mydate = "2016/31 January"; date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); // {31.01.2016 00:00:00} mydate = "11/شعبان/1437"; date = mydate.ToDateTime( culture: CultureInfo.GetCultureInfo("ar-SA"), format: "dd/MMMM/yyyy"); // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&* System.Diagnostics.Debug.Assert( date.Equals(new DateTime(year: 2016, month: 5, day: 18))); } } } 

请尝试下面的内容,其中strDate是“MM / dd / yyyy”格式的date

 var date = DateTime.Parse(strDate,new CultureInfo("en-US", true)) 

Convert.ToDateTime或DateTime.Parse

 string input; DateTime db; Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): "); input = Console.ReadLine(); db = Convert.ToDateTime(input); //////// this methods convert string value to datetime ///////// in order to print date Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day); 

如果您不确定input值,也可以使用DateTime.TryParseExact()。

 DateTime outputDateTimeValue; if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue)) { return outputDateTimeValue; } else { // Handle the fact that parse did not succeed } 

使用DateTime.Parse(string)

 DateTime l_dateTime= DateTime.Parse(dateTimeStr); 

我刚刚得到它,我总是使用

把这个代码放在一个静态类 > public static class ClassName{ }

 public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',') { try { datetime = datetime.Trim(); datetime = datetime.Replace(" ", " "); string[] body = datetime.Split(' '); string[] date = body[0].Split(dateSpliter); int year = date[0].ToInt(); int month = date[1].ToInt(); int day = date[2].ToInt(); int hour = 0, minute = 0, second = 0, millisecond = 0; if (body.Length == 2) { string[] tpart = body[1].Split(millisecondSpliter); string[] time = tpart[0].Split(timeSpliter); hour = time[0].ToInt(); minute = time[1].ToInt(); if (time.Length == 3) second = time[2].ToInt(); if (tpart.Length == 2) millisecond = tpart[1].ToInt(); } return new DateTime(year, month, day, hour, minute, second, millisecond); } catch { return new DateTime(); } } 

这样,你可以使用

 string datetime = "2009-05-08 14:40:52,531"; DateTime dt0 = datetime.TToDateTime(); DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime(); DateTime dt5 = "2009-05-08".ToDateTime(); DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/'); DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.'); DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-'); 

以上所有数量都经过testing

世界上的不同文化以不同的方式写datestring。 例如,在美国01/20/2008是2008年1月20日。在法国,这将抛出一个InvalidFormatExceptionexception。 这是因为法国的date时间是日/月/年,而在美国则是月/日/年。

因此,像2008年1月20日这样的string将在2008年1月20日在法国parsing,然后在美国抛出一个InvalidFormatExceptionexception。

要确定您当前的文化设置,您可以使用System.Globalization.CultureInfo.CurrentCulture。

 string dateTime = "01/08/2008 14:50:50.42"; DateTime dt = Convert.ToDateTime(dateTime); Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}", dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);