我正在尝试将两个日期时间字段(开始日期和结束日期)传递到我的 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/