2009-09-28 105 views
5

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

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

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); 

这个例子抛出一个异常的消息“字符串未被识别为有效的DateTime”。

上面的代码有什么问题?

+0

Falaíbrazuca! :)你能给我们一些关于你的场景的更多信息吗?你是否收到所有三种格式的日期,具有相同的上下文? – 2009-09-29 00:07:57

+0

Falaaí....我需要阅读一个XML文档。在这个文档中有表示日期的字符串。但是这些日期可以是多种格式。我必须确定这些格式并将字符串转换为DateTime。 – 2009-09-29 14:29:15

回答

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

相关问题