C# DateTime.ParseExact格式字符串

C# DateTime.ParseExact格式字符串,c#,.net,datetime,query-string,C#,.net,Datetime,Query String,我有一个web应用程序,它通过查询字符串将日期时间从一个页面传递到另一个页面。它在IE和FireFox中都运行良好,但每当我在Google Chrome中尝试它时就会抛出异常。程序被以下行阻塞: startDateTime = Convert.ToDateTime(Request.QueryString["start"]); 因此,我运行了调试器,发现查询字符串中的值是: Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time) 我断

我有一个web应用程序,它通过查询字符串将日期时间从一个页面传递到另一个页面。它在IE和FireFox中都运行良好,但每当我在Google Chrome中尝试它时就会抛出异常。程序被以下行阻塞:

startDateTime = Convert.ToDateTime(Request.QueryString["start"]);
因此,我运行了调试器,发现查询字符串中的值是:

Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time)
我断定Convert根本无法胜任这项工作,于是开始尝试获取DateTime.ParseExact来驯服这只野兽。但是,到目前为止,我还没有找到正确的格式字符串。下面是我一直在尝试的代码(不起作用):

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

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

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

可能是您的格式没有涵盖
(东部夏令时)
部分。尝试使用常规字符串处理方法从字符串中解析该字符串,然后对其余部分调用
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();
}
输出为:

2012年10月1日星期一10:52:20-04:00


因此,我想您也需要解析字符串的GMT和(东部夏时制)部分

我是否可以建议您在查询字符串中传递诸如“Wed Oct 03 2012 08:00:00 GMT-0400(东部夏时制)”之类的内容,而只传递日期的时间戳?例如,new 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"]));

不需要解析

您希望结果字符串采用什么格式?例如,2012年9月12日或2012年9月12日等@JordanKaye,结果应该是DateTime实例,而不是字符串。因此,输出实际上没有涉及任何格式。我试图将其作为日期时间返回。这似乎不是任何标准格式。您可以将页面的调用者更改为使用某些标准格式吗?例如,JS或C#的“Wed Oct 03 2012 08:00:00 GMT-0400(东部夏令时)”?GMT的
GMT
也会带来问题。很抱歉拒绝接受您的答案。你的代码是有效的,但我最终选择了aquinas建议的解决方案,因为它看起来可能更健壮。是的,如果你能控制生成字符串的内容,那就更有意义了。。。
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var dt =  epoch.AddMilliseconds(Convert.ToInt64(Request.QueryString["start"]));