如何在c#中将字符串转换为特定的DateTime格式?

时间:2009-09-28 21:16:49

标签: c# datetime parsing

如何以特定格式将字符串"28/09/2009"转换为DateTime? 例如:  我想将“2009-09-28 17:30:40”转换为DateTime。  我想将“28/09/2009 17:30:40”转换为DateTime。  我想将“20090928 17:30:40”转换为DateTime。

有多种可能的格式。我试过这个:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd  hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"};
IFormatProvider culture = new CultureInfo("en-US", true);
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None);

此示例引发异常,并显示消息“String未被识别为有效的DateTime”。

上面的代码有什么问题?

1 个答案:

答案 0 :(得分:12)

您的所有格式都没有放在第一天,如下所示:"dd/MM/yyyy"

还要注意大写'M',因为小写'm'代表'分钟'。您的工作时间也有类似的问题;由于你的样品全部使用24小时,你需要一个大写'H'。

您的格式字符串数组应如下所示:

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"};

这些格式与您提供的示例字符串完全匹配。

此外,在这种情况下,您可能希望使用不变文化而不是en-US。否则,格式字符串中的'/'字符实际上是特定于文化的日期分隔符,用户可能会在其本地系统上覆盖。

最后,由于您显然无法在匹配字符串时遇到问题,因此您可能希望使用TryParseExact(),它的工作方式与解析完全相同但使用out参数而不是返回值,这样它就可以返回一个布尔值来表示成功或失败,而不是抛出异常。

请参阅此处的完整格式字符串参考:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx