Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ISO8601直接日期时间解析不正确(按单日)_C#_Json_Asp.net Web Api - Fatal编程技术网

C# ISO8601直接日期时间解析不正确(按单日)

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

我试图将两个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}/{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个小时,这将它们推到第二天。现在把它整理好了。很好的帮助和解释。