为什么我的日期值在web api函数中解析不正确?

时间:2016-04-18 18:12:53

标签: c# asp.net-web-api asp.net-mvc-5 asp.net-web-api2

我从客户端向web api函数发送此字符串:

date = "Sat, 27 Oct 2012 18:10:00 GMT"

这个web api函数获取字符串并解析它:

    public HttpResponseMessage Get(DateTime date)
    {
        //some logic
    }

在web api函数的调试模式下,我在解析后检查它,我看到了:

{10/27/2012 8:10:00 PM}

我得到的结果是:

{10/27/2012 18:10:00 PM}

知道为什么它解析错了吗?

2 个答案:

答案 0 :(得分:2)

它与发送的UTC时间和转换为当地时间的日期有关。为避免此错误和其他错误,您不应以ISO 8601的任何其他格式从客户端发送日期时间。这可确保您的客户端代码可以在任何语言环境中重用。对于您无法控制用户安装的语言环境的浏览器和网站,尤其如此。如果他们使用西班牙语es-MX安装了浏览器,则日期的格式可以是日期,然后是月份,然后是年份,如果按照正常日期时间发送,则无法正确解析。

ISO8601还会在发送到服务器时保留时间偏移量。

从JavaScript发送日期时,datetime对象包含一个名为.toISOString()的方法。在创建要发送到服务器的字符串时调用此方法。

在Web服务器上,您可以使用DateTime,然后使用.Kind = Utc,或者您可以使用DateTimeOffset。无论哪种方式,如果您将其作为符合ISO8601标准的字符串发送,日期/时间将正确实现。

这也是answered before here

小结

  • 始终从客户端使用ISO-8601到客户端通常由Web API中的JSON格式化程序自动处理)。
  • 始终在模型中直接使用DateTimeOffsetDateTime个实例。

答案 1 :(得分:1)

Sat, 27 Oct 2012 18:10:00 GMT日期格式为协调世界时(UTC)

您在date变量中收到的值是相同的,但使用的是您当地的时区。

您可以使用date方法从ToUniversalTime()获取通用时间:

date.ToUniversalTime()