DateTime.ParseExact格式字符串

时间:2012-10-01 14:38:20

标签: c# .net datetime query-string

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

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

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

3 个答案:

答案 0 :(得分:4)

我可能建议您在查询字符串中输入类似于“星期三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"]));

无需解析。

答案 1 :(得分:3)

可能只是您的格式未涵盖(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);

答案 2 :(得分:0)

我尝试运行代码

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)部分字符串