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对象。