Javascriptdate通过Ajax C#
我有一个JavaScriptdate对象,它给了我这种格式的datestring,“Wed Dec 16 00:00:00 UTC-0400 2009”。
我通过Ajax传递给服务器(ASP.NET C#)
如何将“Wed Dec 16 00:00:00 UTC-0400 2009”转换为C#DateTime对象。 DateTime.Parse失败。
您可以使用DateTime.ParseExact ,它允许您指定要用于parsing的格式string:
DateTime dt = DateTime.ParseExact("Wed Dec 16 00:00:00 UTC-0400 2009", "ddd MMM d HH:mm:ss UTCzzzzz yyyy", CultureInfo.InvariantCulture);
最可靠的方法是从时代开始使用毫秒。 您可以通过调用Date.getTime()
来轻松获得JavaScript。 然后,在C#中,您可以将它转换为如下所示的DateTime:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript return new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);
你必须乘以10,000来从毫秒转换为“滴答”,这是100纳秒。
这可能不可能在你的情况下,但我真的build议更新JS代码传递ISO 8601格式的date/时间。 http://en.wikipedia.org/wiki/ISO_8601
ISO 8601不仅是正式的标准,而且易于使用,避免了很多时区的麻烦!
在Javascript中获得8601个date时间string:
var d = new Date(); var iso_time = d.toISOString(); //"2014-05-06T18:49:16.029Z"
要阅读C#中的8601date时间string:
DateTime d = DateTime.Parse(json_string);
为了后代,为了帮助未来的Google员工,我想扩展EMP的答案。
EMP的答案提供了UTC的时间(如果这是你正在寻找,使用)。
在C#中使用本地时间到达客户端 :
在JavaScript中:
var now = new Date(); var UTC = now.getTime(); var localOffset = (-1) * now.getTimezoneOffset() * 60000; var currentTime = Math.round(new Date(UTC + localOffset).getTime());
在C#中:
DateTime currentTimeDotNet = new DateTime(1970, 1, 1).AddTicks(Convert.ToInt64(currentTime) * 10000);
感谢这个博客和EMP的回答,但是两方面的尝试和错误都是正确的,所以对于未来的人来说。
说实话,我不会尝试在C#中分析datestring,我个人尝试从您的JavaScriptdate对象创build一个更有用的date结构。
例如,你可以在JavaScript中使用parse()
,它将返回表示date对象的ms,你可以使用DateTime.Parse()
将其转换为C#DateTime对象。