ISO8601直接的日期时间解析不正确

本文关键字:不正确 时间 日期 ISO8601 | 更新日期: 2023-09-27 18:06:12

我试图通过两个datetime字段(开始日期和结束日期)到我的webapi服务器,其中我的javascript中的ISO8601格式日期字符串似乎正确地传递,但服务器在一天内错误地解释两个日期。

/服务/api/应用程序/2016 - 09 - 01 t14:00:00.000z/2016 - 09 - 30 t13:59:59.999z/

结果:

Start Date ='2016-09-02 00:00:00'

End Date = '2016-10-01 00:00:00'

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

任何想法吗?

ISO8601直接的日期时间解析不正确

因为你是在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:002016/09/30 23:59:59 +10:00之前

结束日期似乎仍然有一个奇怪的四舍五入错误。