Javascript通过Ajax与C#约会

Ian*_*ink 31 javascript c# date

我有javascript日期对象,它给我一个这种格式的日期字符串,"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失败.

dtb*_*dtb 52

您可以使用DateTime.ParseExact,它允许您指定要用于解析的格式字符串:

DateTime dt = DateTime.ParseExact("Wed Dec 16 00:00:00 UTC-0400 2009",
                                  "ddd MMM d HH:mm:ss UTCzzzzz yyyy",
                                  CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)


EMP*_*EMP 30

最可靠的方法是使用自纪元以来的毫秒数.您可以通过调用轻松地在JavaScript中获取此信息Date.getTime().然后,在C#中,您可以将其转换为DateTime,如下所示:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);
Run Code Online (Sandbox Code Playgroud)

你必须乘以10,000才能从毫秒转换为"滴答",这是100纳秒.


Hov*_*dle 22

在您的情况下这可能是不可能的,但我真的建议更新JS代码以传递ISO 8601格式的日期/时间. http://en.wikipedia.org/wiki/ISO_8601

ISO 8601不仅是正式的标准,它也易于使用,并防止了很多时区的麻烦!

要在Javascript中获取8601个日期时间字符串:

var d = new Date();
var iso_time = d.toISOString(); //"2014-05-06T18:49:16.029Z"
Run Code Online (Sandbox Code Playgroud)

要在C#中读取8601个日期时间字符串:

DateTime d = DateTime.Parse(json_string);
Run Code Online (Sandbox Code Playgroud)


RJB*_*RJB 5

为了后人,为了帮助未来的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()); 
Run Code Online (Sandbox Code Playgroud)

在C#中:

        DateTime currentTimeDotNet = new DateTime(1970, 1, 1).AddTicks(Convert.ToInt64(currentTime) * 10000);
Run Code Online (Sandbox Code Playgroud)

感谢这个博客和EMP的答案,但采取了一些试验和错误两端得到它的权利,所以仅供参考为将来的乡亲.