我正在使用.NET 3.5,我的日期以字符串形式出现,格式如下:
1月20日星期二20:47:43 GMT 2009
第一个问题,该格式的名称是什么?第二个问题,将此字符串转换为日期时间最简单,最清晰的方法是什么?如果可能,我希望能够使用.net API / Helper方法。
编辑:我忘了提到我已经尝试过使用DateTime.Parse和Convert.ToDateTime。这些都没有。
答案 0 :(得分:11)
您可以将DateTime.TryParseExact()方法与合适的格式字符串一起使用。见here
编辑:尝试这样的事情:
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() );
}
答案 1 :(得分:2)
DateTime dt;
if(DateTime.TryParse("Tue Jan 20 20:47:43 GMT 2009", out dt)){
/* Yay.. it's valid */
}
您还可以使用TryParseExact
指定日期时间
使用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。
答案 2 :(得分:2)
你去了
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
)。
答案 3 :(得分:0)
您可以使用Convert.ToDateTime
答案 4 :(得分:0)
尝试做一个DateTime.Parse(“Tue Jan 20 20:47:43 GMT 2009”),看看它是否接受了它。
这是自定义DateTime格式的一个很好的链接。
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
我希望有所帮助。
答案 5 :(得分:0)
试试这个:
DateTime.TryParse(Tue Jan 20 20:47:43 GMT 2009", out objDt);
您需要提供输出值。使用If和if返回true,然后是有效日期。
HTH
答案 6 :(得分:0)
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() );
答案 7 :(得分:0)
您可以使用DateTime.ParseExact或DateTimeOffset.ParseExact指定日期字符串的格式。
虽然,我无法快速弄清楚如何匹配时区说明符(即GMT)。看一下谷歌的一些结果,表明大多数试图解决这个问题的人都是以启发的方式做到这一点 - 制作所有时区和偏移的列表然后解析字符串并用+/-偏移替换时区说明符,或其他一些hackish方法。虽然这些解决方案都不是来自StackOverflow,但谁知道它们有多好。
这是我写的一个简短示例,其中“GMT”从试图转换的日期字符串中删除。如果您可以使用偏移替换时区,请将“zzz”添加到格式字符串中。对于解析其他格式,请参阅列出所有格式的MSDN页面Custom Date and Time Format Strings。
// 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);
}
答案 8 :(得分:-1)
DateTime.Parse("Tue Jan 20 20:47:43 GMT 2009")