从JavaScript到C#解析日期和时间

我有一些JavaScript代码,我正试图传递给我的Web服务。 我的JavaScript代码应该以UTC格式发送日期。 在本地,我生成代码的时间是在12:30:43 pm。 当我执行JavaScript代码时,生成了以下日期/时间:

2012-06-03T20:30:43.000Z

该日期/时间是根据以下代码生成的:

var now = new Date(); var utcDate = new Date( now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds() ); 

当我将日期/时间从JavaScript传递回我的Web服务时,它会被序列化,如下所示:

20120603163043

在这一点上,这对我来说是正确的。 然后我需要获取该字符串并将其转换为C#中的日期/时间。 为了做到这一点,我使用以下C#代码:

 DateTime _value = DateTime.MinValue; DateTime.TryParseExact(value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _value) 

当发生这种情况时,我会得到以下日期/时间。 6/3/2012 12:30:43 PM

我究竟做错了什么? 我期待的日期/时间是6/3/2012 4:30:43 PM

您得到的结果是正确的,但请检查您的DateTimeKind属性。 你会注意到它没有设置为UTC而是设置为Local

您可以使用DateTimeStyles.AdjustToUniversal生成DateTime设置为UTCDateTime

 DateTime dateTime; DateTime.TryParseExact( value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal, out dateTime); 

看到它在ideone上工作。

如果您只想使用序列化(例如webAPI),我发现JS toISOString非常有用且兼容。

 //JAVASCRIPT var d = new Date(); $toPut.dateTime = d.toISOString(); $toPut.put() //C# [Put("/setup/dateTime"), HttpPut] public HttpResponseMessage SetDateTime([FromBody]DateTime dateTimeSettings ) 

这样您就可以保留数据结构而不处理解析。

您必须将日期参数作为UTC格式传递给Web服务,然后使用TryParse方法将其转换为C#日期对象。

试试这个:

 //Javascript var now = new Date(); //just like: 'Thu, 21 Mar 2013 12:44:40 GMT' var utcNowString = now.toUTCString(); //pass this parameter to your web service 

这是C#代码:

 DateTime date; DateTime.TryParse(jsDateString, out date); //parsed as: '21.03.2013 14:44:40' 

希望这可以帮助。