DateTime.TryParse问题,date为yyyy-dd-MM格式

我以string格式“2011-29-01 12:00 am”有以下date。 现在我试图用下面的代码将它转换为datetime格式:

DateTime.TryParse(dateTime, out dt); 

但我总是把dt当成{1/1/0001 12:00:00 AM},你能告诉我为什么吗? 以及如何将该string转换为date。

编辑:我刚才看到大家提到使用格式参数。 我现在要提到,我不能使用格式参数,因为我有一些设置来select用户想要的自定义date格式,并基于该用户能够通过jQuery datepicker自动获取该格式的文本date。

这应该基于你的例子“2011-29-01 12:00 am”

 DateTime dt; DateTime.TryParseExact(dateTime, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

您需要使用ParseExact方法 。 这需要一个string作为第二个参数来指定datetime所在的格式,例如:

 // Parse date and time with custom specifier. dateString = "2011-29-01 12:00 am"; format = "yyyy-dd-MM h:mm tt"; try { result = DateTime.ParseExact(dateString, format, provider); Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } catch (FormatException) { Console.WriteLine("{0} is not in the correct format.", dateString); } 

如果用户可以在UI中指定格式,则需要将其转换为可传入此方法的string。 您可以通过允许用户直接input格式string来实现这一点 – 虽然这意味着转换更可能失败,因为他们input无效的格式string – 或者有一个combobox,提供他们的可能select和你为这些select设置格式string。

如果input可能不正确(例如用户input),则最好使用TryParseExact而不是exception来处理错误情况:

 // Parse date and time with custom specifier. dateString = "2011-29-01 12:00 am"; format = "yyyy-dd-MM h:mm tt"; DateTime result; if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result)) { Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } else { Console.WriteLine("{0} is not in the correct format.", dateString); } 

从msdn的DateTime开始:

types:System.DateTime%如果此方法返回,则包含与s中包含的date和时间(如果转换成功)相等的DateTime值;如果转换失败 ,则包含MinValue 。 如果s参数为空,则为空string(“”),或者不包含date和时间的有效string表示forms,转换将失败。 此parameter passing未初始化。

改用格式string"yyyy-dd-MM hh:mm tt" parseexact。

这样可行:

 DateTime dt = DateTime.ParseExact("2011-29-01 12:00 am", "yyyy-dd-MM hh:mm tt", System.Globalization.CultureInfo.InvariantCulture); 

尝试使用安全的TryParseExact方法

 DateTime temp; string date = "2011-29-01 12:00 am"; DateTime.TryParseExact(date, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp); 
 DateTime dt = DateTime.ParseExact("11-22-2012 12:00 am", "MM-dd-yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture); 

如果您给用户更改date/时间格式的机会,那么您将不得不创build一个相应的格式string用于parsing。 如果您知道可能的date格式(即用户必须从列表中进行select),那么这更容易,因为您可以在编译时创build这些格式string。

如果让用户进行date/时间格式的自由格式devise,则必须在运行时创build相应的DateTime格式string。