DateTime.ParseExact格式字符串

我有一个Web应用程序,通过查询字符串将DateTime从一个页面传递到另一个页面。 它在IE和FireFox中运行得很好,但每当我在谷歌浏览器中尝试它时都会抛出exception。 该程序在以下几行窒息:

startDateTime = Convert.ToDateTime(Request.QueryString["start"]); 

所以,我运行调试器,发现查询字符串中的值是:

 Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time) 

我得出结论,转换只是没有达到工作,并着手试图让DateTime.ParseExact驯服这个野兽。 但是,到目前为止,我找不到正确的格式字符串。 这是我一直在尝试的代码(不起作用):

 DateTime.ParseExact(Request.QueryString["start"], "ddd MMM dd yyyy HH:mm:ss zzz", CultureInfo.InvariantCulture); 

此页面是通过第三方组件(DayPilotCalendar)调用的某些JavaScript从另一个页面调用的。 以下是在DayPilotCalendar控件上设置的相关属性:

 TimeRangeSelectedJavaScript="GB_showPage('Request Magnet Time', '../../../EventAddEdit.aspx?start=' + encodeURIComponent(start) + '&end=' + encodeURIComponent(end))" 

我的格式字符串有什么问题?

可能我建议你不要在你的查询字符串中传递类似:“星期三03 03 2012 08:00:00 GMT-0400(东部夏令时间)”,而不是简单地传递日期的时间戳? 例如,新的Date()。getTime()。 (UTC中1970年以来的毫秒数)。 然后,在C#中你可以做到:

 var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); var dt = epoch.AddMilliseconds(Convert.ToInt64(Request.QueryString["start"])); 

无需解析。

可能只是您的格式未涵盖(Eastern Daylight Time)部分。 尝试使用常规字符串处理方法从字符串中解析出来,然后在余数上调用ParseExact

编辑:正如Oded指出的那样,您还必须将GMT作为文字放入格式字符串中:

 "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz" 

以下作品:

 var input = "Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time)"; var trim = input.Substring(0, input.IndexOf(" (")); var dt = DateTime.ParseExact( trim, "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz", CultureInfo.InvariantCulture); 

我试过运行代码

 static void Main(string[] args) { Console.WriteLine(DateTime.Now.ToString("ddd MMM dd yyyy HH:mm:ss zzz")); Console.Read(); } 

输出是:

Mon Oct 01 2012 10:52:20 -04:00

所以我猜你需要解析GMT和(Eastern Daylight Time)部分字符串