c# - ISO8601 直接 DateTime 单日解析不正确

标签 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
}

有什么想法吗?

最佳答案

因为您处于 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

虽然您的结束日期似乎仍然存在奇怪的舍入错误。

关于c# - ISO8601 直接 DateTime 单日解析不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402375/

相关文章:

c# - Azure 是否限制了我的 WebApi?

c# - 通过 CRM Web API 创建注释

c# - Web Api 和版本 Controller 中的版本路由

c# - 扩展方法和源代码的向前兼容性

c# - 如何为数据容器实现 "Do I Need To Save"机制?

c# - 如何确保 Linq to Sql 不会覆盖或违反不可为 null 的数据库默认值?

javascript - 根据开始日期和结束日期过滤 JSON

java - Spring Json 响应中的时区问题

c# - 我可以使用 Guid 的前 16 个或后 16 个字符并且它仍然是唯一的吗?

java - 使用GSON解析JSON得到 "content"