如何将具有exception格式的字符串转换为datetime

我使用的是.NET 3.5,我的日期以字符串forms出现,格式如下:

1月20日星期二20:47:43 GMT 2009

第一个问题,该格式的名称是什么? 第二个问题,将此字符串转换为日期时间最简单,最清晰的方法是什么? 如果可能的话,我希望能够使用.net API / Helper方法。

编辑:我忘了提到我已经尝试过使用DateTime.Parse和Convert.ToDateTime。 这些都没有奏效。

您可以将DateTime.TryParseExact()方法与合适的格式字符串一起使用。 看到这里

编辑:尝试这样的事情:

DateTime dt; System.Globalization.CultureInfo enUS = new System.Globalization.CultureInfo("en-US"); if ( DateTime.TryParseExact( "Tue Jan 20 20:47:43 GMT 2009", "ddd MMM dd H:mm:ss \"GMT\" yyyy", enUS, System.Globalization.DateTimeStyles.NoCurrentDateDefault , out dt )) { Console.WriteLine(dt.ToString() ); } 

你去吧

 DateTime d = DateTime.ParseExact("Tue Jan 20 20:47:43 GMT 2009".Replace("GMT", "+00"), "ddd MMM dd H:mm:ss zz yyyy", new CultureInfo("en-US")); 

DateTime API及其文档非常糟糕。 例外只会告诉您“字符串未被识别为有效的DateTime”,这实际上没有帮助。 它必须自己弄清楚日期格式说明符,因为我没有在MSDN中找到它们。

我想,“en-US”语言环境是必要的,因为您的日期格式使用英语缩写,如“Tue”。

无论如何,我无法告诉你日期格式是什么。 它非常相似,但不等于HTTP使用的格式(例如, If-Modified-Since: Wed, 08 Dec 2004 13:25:25 GMT )。

 DateTime dt; if(DateTime.TryParse("Tue Jan 20 20:47:43 GMT 2009", out dt)){ /* Yay.. it's valid */ } 

您还可以使用TryParseExact来指定DateTime的格式

使用TryparseExact

 const string FORMAT = "ddd MMM dd HH:mm:ss \"GMT\" yyyy"; if (DateTime.TryParseExact("Tue Jan 20 20:47:43 GMT 2009", FORMAT, CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal, out dt)) { /* is valid */ } 

我相信这应该有效。 不确定它是否会尝试解析GMT。

您可以使用Convert.ToDateTime

尝试做一个DateTime.Parse(“Tue Jan 20 20:47:43 GMT 2009”),看看它是否接受了它。

这是自定义DateTime格式的一个很好的链接。

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

我希望有所帮助。

试试这个:

 DateTime.TryParse(Tue Jan 20 20:47:43 GMT 2009", out objDt); 

您需要提供输出值。 使用If和if返回true,然后是有效日期。

HTH

 CultureInfo enUS = new CultureInfo( "en-US" ); DateTime dt = DateTime.ParseExact( "Tue Jan 20 19:47:43 GMT 2009", "ddd MMM dd HH:mm:ss 'GMT' yyyy", enUS, DateTimeStyles.None ); Console.WriteLine( dt.ToString() ); 

您可以使用DateTime.ParseExact或DateTimeOffset.ParseExact指定日期字符串的格式。

虽然,我无法快速弄清楚如何匹配时区说明符(即GMT)。 看一下谷歌的一些结果,表明大多数试图解决这个问题的人正在尝试这样做 – 制作所有时区和偏移的列表然后解析字符串并用+/-偏移替换时区说明符,或其他一些hackish方法。 虽然这些解决方案都不是来自StackOverflow,但谁知道它们有多好。

这是我写的一个简短示例,其中“GMT”从试图转换的日期字符串中删除。 如果您可以使用偏移替换时区,请将“zzz”添加到格式字符串中。 对于解析其他格式,inheritanceMSDN页面自定义日期和时间格式字符串列出所有格式 。

 // Parse date and time with custom specifier. string dateString = "Tue Jan 20 20:47:43 2009"; string format = "ddd MMM dd HH:mm:ss yyyy"; DateTime result; System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture; 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); } 
 DateTime.Parse("Tue Jan 20 20:47:43 GMT 2009")