ISO8601直接DateTime解析错误的单日

时间:2016-09-09 01:08:54

标签: c# json asp.net-web-api

我正在尝试将两个日期时间字段(开始日期和结束日期)传递给我的webapi服务器,其中我的javascript中的ISO8601格式日期字符串似乎正确传递,但服务器正在将这两个日期错误地解释为一天

/service/api/application/2016-09-01T14:00:00.000Z/2016-09-30T13:59:59.999Z /

结果:

开始日期='2016-09-02 00:00:00'

结束日期='2016-10-01 00:00:00'

[Route("api/Application/{dateLodgedStart}/{dateLodgedEnd}")]
        [ResponseType(typeof(PagedResultObject<ApplicationObject>))]
        public HttpResponseMessage Get(DateTime? dateLodgedStart, DateTime? dateLodgedEnd) {
 //Do stuff
}

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

因为你在GMT + 10并且你正在解析&#34; Zulu Time&#34; - 即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

但是你的结束日期似乎仍有一个奇怪的舍入错误。