我有一个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))"
我的格式字符串有什么问题?
答案 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)部分字符串