【发布时间】:2016-02-15 07:11:21
【问题描述】:
我在 ASP.NET C# Web Api 2 项目中遇到了 DateTimes 问题。我需要在查询字符串中传递 ISO 8601 日期,如下所示:
api/resource?at=2016-02-14T23:30:58Z
我的控制器方法如下
[HttpGet("/resource")]
public IActionResult GetResource([FromQuery]DateTime? at = null)
{
if (!at.HasValue)
{
at = DateTime.UtcNow;
}
else
{
at = DateTime.SpecifyKind(at.Value, DateTimeKind.Utc);
}
// ...
}
请注意这个小技巧 - 尽管指定了表示 UTC 的“Z”,但日期以本地 DateTimeKind 的形式出现。日期应始终以 UTC 格式传递,但理想情况下我不希望这是一个约束。我在内部使用 NodaTime,并且出于遗留原因仅在查询和响应模型中公开 DateTime。
为什么我的日期被解析为本地的 DateTimeKind?
如何使用 ASP.NET web api 2 从查询字符串中读取我的 UTC 日期?
【问题讨论】:
-
如果调用 ToUniversalTime() 转换为 UTC 怎么办?
-
在 dup 帖子中查看 my answer。
标签: c# asp.net datetime asp.net-web-api2 nodatime