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
}
任何想法吗?
因为你是在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之前
结束日期似乎仍然有一个奇怪的四舍五入错误。