【问题标题】:Time offset value of a datetime is missing in Azure Web API applicationAzure Web API 应用程序中缺少日期时间的时间偏移值
【发布时间】:2016-08-29 17:58:20
【问题描述】:

我有一个托管在 Azure 中的 wep api,它是 .NET Core。目前它是一个简单的 CRUD api。我有一个有趣的问题,我找不到或无法理解原因。

在我的 api 中,像往常一样有一个 DateTime 属性。当我将数据发布到 api 时,时间偏移在服务器端消失了。

"dateTime":"2016-08-29T05:13:21.931+03:00" +03:00 变成 00:00

谁能解释一下原因和解决方法?

{
   "content":"Test Data",
   "location":{
      "name":"Some Location",
      "address":"",
      "latitude":41.0920448,
      "longitude":28.9444847
   },
   "owner":{
      "userName":"Some User",
      "name":null,
      "registrationType":0,
      "profilePictureURL":null
   },
   "dateTime":"2016-08-29T05:13:21.931+03:00",
   "createTime":"2016-08-29T05:13:21.7791051+00:00",
   "rankingPoint":0.0
}

【问题讨论】:

  • 您是从客户端发布日期时间还是直接从 SQL Server 或 Azure Server 获取日期时间?
  • 我从上面的客户发帖
  • 它是立即转换还是将其存储在 SQL 服务器中,然后当您检索它时将其转换为 00:00 ?
  • 阅读我之前的评论,如果可能,请向我提供信息您如何验证它已转换为 00:00?
  • 我没有任何 SQL 或其他持久层。我有一本字典,我只是在其中添加值。只需从 Postman 或 Fiddler 以 "dateTime":"2016-08-29T05:13:21.931+03:00" 形式发送 JSON 数据;我的对象在服务器端的日期时间值是 2016-08-29T05:13:21.931+00:00。我通过检查字典项目验证了这一点。

标签: rest azure asp.net-web-api asp.net-core azure-api-apps


【解决方案1】:

1.首先,您的 azure 服务在 00:00 时区运行。

  1. 如果您查看 DateTime 结构,它具有称为 Kind 的特殊属性。在序列化/反序列化期间会考虑此属性。

    DateTime dt = DateTime.Now; // dt.Kind (Local , Utc etc)。

    序列化的工作方式在服务器端 Json 序列化设置中查看此属性。 此选项也无济于事。

3.我发现的简单且最佳的解决方案是使用 DateTimeOffset 而不是 DateTime。

【讨论】:

  • 非常感谢...这对我来说是一个合法的解决方案。
猜你喜欢
  • 2011-05-18
  • 2015-01-05
  • 2015-08-08
  • 2013-09-13
  • 2014-09-14
  • 1970-01-01
  • 2015-08-26
  • 2021-12-19
  • 1970-01-01
相关资源
最近更新 更多