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);
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);
你必须乘以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"
要在C#中读取8601个日期时间字符串:
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的答案,但采取了一些试验和错误两端得到它的权利,所以仅供参考为将来的乡亲.
| 归档时间: | 
 | 
| 查看次数: | 31365 次 | 
| 最近记录: |