我有javascript日期对象,它给了我这种格式的日期字符串,“Wed Dec 16 00:00:00 UTC-0400 2009”。Javascript date to C#via Ajax
我通过Ajax把它传递给服务器(ASP.NET C#)
我如何转换, “星期三12月16日00:00:00 UTC-0400 2009” 到C#DateTime对象。 DateTime.Parse失败。
我有javascript日期对象,它给了我这种格式的日期字符串,“Wed Dec 16 00:00:00 UTC-0400 2009”。Javascript date to C#via Ajax
我通过Ajax把它传递给服务器(ASP.NET C#)
我如何转换, “星期三12月16日00:00:00 UTC-0400 2009” 到C#DateTime对象。 DateTime.Parse失败。
您可以使用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);
说实话我不会尝试在C#中解析日期字符串,我个人会尝试从您的javascript日期对象中创建更有用的日期结构。
例如,你可以在JavaScript将返回表示日期的对象,您可以使用DateTime.Parse()
上转换为C#DateTime对象的MS使用parse()
。
最可靠的方法是使用毫秒,因为时代。通过致电Date.getTime()
,您可以轻松地在JavaScript中获得此信息。然后,在C#中,你可以将其转换为这样的日期时间:
long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1).AddTicks(msSinceEpoch * 10000);
你有10000乘以从毫秒到“蜱”,这是100纳秒转换。
我知道这是一个古老的答案,但我确实有一个问题。是否有什么特别的原因可以添加新的TimeSpan,而不是调用DateTime的'.AddMilliseconds'方法? – Joshua 2011-11-15 17:25:08
没有理由我记得。我已经编辑了使用'AddTicks'的答案,这可能比'AddMilliseconds'稍微快一点(我们在这里谈论几个CPU周期)。 – EMP 2011-12-12 09:33:11
我很好奇为什么“时代”是1970/01/01。事实证明,这是“Unix时代”。我想我会分享,以防其他人感到好奇或困惑:http://en.wikipedia.org/wiki/Unix_time – 2012-06-20 16:26:06
仅仅为了后人,为了帮助未来的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);
感谢this blog和EMP的答案,但采取了一些在两端进行试验和错误,以确保未来伙伴的合作。
这是最正确的答案正确处理时区调整。 – 2014-01-15 13:04:35
你的情况,这可能是不可能的,但我真的建议更新JS代码通过ISO 8601格式的日期/时间。 http://en.wikipedia.org/wiki/ISO_8601
ISO 8601不仅是正式的标准,它也易于使用,并防止很多时区麻烦!
要获得8601个日期字符串在Javascript:
var d = new Date();
var iso_time = d.toISOString(); //"2014-05-06T18:49:16.029Z"
要阅读C#8601个日期字符串:
DateTime d = DateTime.Parse(json_string);
+1我不知道你能做到这一点,非常酷:) – Jay 2009-12-10 00:02:06
您可能想使用DateTimeOffset代替。 – ColacX 2016-06-27 08:08:03