【发布时间】:2019-12-16 02:03:42
【问题描述】:
我遇到了一个我无法解决的问题。
我尝试在服务器端处理 UTC DateTime。
我有一个带有端点的 AspNetCore Mvc 应用程序,该端点接受可能包括 DateTimes 的查询。我希望 Mvc 了解这些日期已经在 UTC 中,而不是“再次”转换它们。
我的系统在西班牙,(UTC +2)
如果我像这样向我的 localhost 服务器发送一个 http 请求:
http://localhost:50004/api/Resources?appliesOn=2018-06-30T18:00:00.000Z
我希望将反序列化的日期时间设置为 UTC,表示与以下日期相同的日期:
DateTime.SpecifyKind(new DateTime(2018, 6, 30, 18, 0, 0), DateTimeKind.Utc)
但我可以看到 Mvc 总是将日期 2018-06-30T18:00:00.000Z 转换为两个小时后:2018-06-30 20:00:00
我试图告诉 Mvc 使用 UTC json 序列化器/反序列化器,但没有任何改变:
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});
有没有办法在 http GET 请求中发送查询参数作为 UTC 日期时间的表示?我理解 ISO 8601 中的日期,如果它有后缀 Z,则表示“零偏移”,应该已经解释为 UTC 日期时间。为什么 Mvc 会对此进行转换并添加 2 小时偏移量?
任何澄清将不胜感激!
PS:这是我的端点,你可以看到没有什么特别的:
[HttpGet("")]
public IActionResult GetResources()
{
var displayUri = Request.GetDisplayUrl();
var requestUri = new Uri(displayUri);
var filter = _filteredRequestFactory.Create(requestUri);
var resources = _myProjection.GetResourcers(filter);
return Ok(resources);
}
【问题讨论】:
标签: c# datetime asp.net-core-mvc utc iso8601