C# ISO8601直接日期时间解析不正确(按单日)
我试图将两个datetime字段(开始日期和结束日期)传递给我的webapi服务器,其中javascript中的ISO8601格式日期字符串似乎传递正确,但服务器在一天内错误地解释了这两个日期 /服务/api/application/2016-09-01T14:00:00.000Z/2016-09-30T13:59:59.999Z/ 结果: 开始日期='2016-09-02 00:00:00'C# ISO8601直接日期时间解析不正确(按单日),c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我试图将两个datetime字段(开始日期和结束日期)传递给我的webapi服务器,其中javascript中的ISO8601格式日期字符串似乎传递正确,但服务器在一天内错误地解释了这两个日期 /服务/api/application/2016-09-01T14:00:00.000Z/2016-09-30T13:59:59.999Z/ 结果: 开始日期='2016-09-02 00:00:00' [Route("api/Application/{dateLodgedStart}/{dateLodg
[Route("api/Application/{dateLodgedStart}/{dateLodgedEnd}")]
[ResponseType(typeof(PagedResultObject<ApplicationObject>))]
public HttpResponseMessage Get(DateTime? dateLodgedStart, DateTime? dateLodgedEnd) {
//Do stuff
}
结束日期='2016-10-01 00:00:00'
[Route("api/Application/{dateLodgedStart}/{dateLodgedEnd}")]
[ResponseType(typeof(PagedResultObject<ApplicationObject>))]
public HttpResponseMessage Get(DateTime? dateLodgedStart, DateTime? dateLodgedEnd) {
//Do stuff
}
[路由(“api/Application/{dateLodgedStart}/{dateLodgedEnd}”)]
[响应类型(类型(PagedResultObject))]
公共HttpResponseMessage Get(DateTime?dateLodgedStart,DateTime?dateLodgedEnd){
//做事
}
有什么想法吗?因为您在GMT+10,并且您在“祖鲁时间”(即GMT+0)解析日期,那么解析器会自动为您添加10个小时 如果我们使用C#进行解析,那么我们可以使用
DateTimeOffset.Parse:
var startDate =
DateTimeOffset
.Parse("2016-09-01T14:00:00.000Z")
.ToOffset(TimeSpan.FromHours(10.0));
var endDate =
DateTimeOffset
.Parse("2016-09-30T13:59:59.999Z")
.ToOffset(TimeSpan.FromHours(10.0));
Console.WriteLine(startDate);
Console.WriteLine(endDate);
这将产生:
2016/09/02 00:00:00 +10:00
2016/09/30 23:59:59 +10:00
2016/09/02 00:00:00 +10:00
2016/09/30 23:59:59 +10:00
不过,您的结束日期似乎仍然存在奇怪的舍入错误。您所在的时区是什么?客户端和服务器都在GMT/UTC+10:00。即使存在差异,这是否也是一个问题?如果我将日期作为值传递,是否应该使用该值而不是尝试将其转换为本地时间?这些时间末尾的Z
表示“祖鲁时间”或“GMT+0”。所以,这是认识到你在格林尼治标准时间+10,并为你增加了10个小时。这肯定让我走上了正确的方向。在Javascript方面,我使用toJson将本地时间转换为UTC(即14小时),然后转到web服务器,它再次将其更改为+10,再添加10个小时,这将它们推到第二天。现在把它整理好了。很好的帮助和解释。