我从客户端向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}
知道为什么它解析错了吗?
答案 0 :(得分:2)
它与发送的UTC时间和转换为当地时间的日期有关。为避免此错误和其他错误,您不应以ISO 8601的任何其他格式从客户端发送日期时间。这可确保您的客户端代码可以在任何语言环境中重用。对于您无法控制用户安装的语言环境的浏览器和网站,尤其如此。如果他们使用西班牙语es-MX
安装了浏览器,则日期的格式可以是日期,然后是月份,然后是年份,如果按照正常日期时间发送,则无法正确解析。
ISO8601
还会在发送到服务器时保留时间偏移量。
从JavaScript发送日期时,datetime对象包含一个名为.toISOString()的方法。在创建要发送到服务器的字符串时调用此方法。
在Web服务器上,您可以使用DateTime,然后使用.Kind = Utc,或者您可以使用DateTimeOffset
。无论哪种方式,如果您将其作为符合ISO8601标准的字符串发送,日期/时间将正确实现。
ISO-8601
(到客户端通常由Web API中的JSON格式化程序自动处理)。DateTimeOffset
或DateTime
个实例。答案 1 :(得分:1)
Sat, 27 Oct 2012 18:10:00 GMT
日期格式为协调世界时(UTC)。
您在date
变量中收到的值是相同的,但使用的是您当地的时区。
您可以使用date
方法从ToUniversalTime()
获取通用时间:
date.ToUniversalTime()