Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的日期值在web api函数中解析不正确?_C#_Asp.net Web Api_Asp.net Mvc 5_Asp.net Web Api2 - Fatal编程技术网

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

C# 为什么我的日期值在web api函数中解析不正确?,c#,asp.net-web-api,asp.net-mvc-5,asp.net-web-api2,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

我从客户端向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}


知道解析错误的原因吗?

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

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

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

date.ToUniversalTime()

它与发送UTC时间以及将日期转换为本地时间有关。为避免此错误和其他错误,您不应以任何其他格式从客户端发送日期时间。这确保了客户端代码可以在任何语言环境中重用。当涉及到浏览器和网站时,尤其如此,你几乎无法控制用户安装的区域设置。如果浏览器安装为西班牙语
es MX
格式,则日期的格式可能是日、月、年,如果作为正常日期时间发送,则无法正确解析

ISO8601
还保留发送到服务器时的时间偏移

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

然后,在web服务器上,您可以使用DateTime(随后将具有.Kind=Utc),也可以使用
DateTimeOffset
。如果将日期/时间作为符合ISO8601标准的字符串发送,则无论哪种方式,日期/时间都将正确具体化

这一点也很重要

扼要重述
  • 始终在客户端之间使用
    ISO-8601
    (到客户端通常由Web API中的JSON格式化程序自动处理)
  • 始终在模型中直接使用
    DateTimeOffset
    DateTime
    实例

您如何解析它?是否将其保存在本地时区而不是UTC?您可能希望发布一些代码以获取答案。解析将自动在此行中精确!!!可以在web api签名方法中获取UniversalTime吗?@Michael:让我看看,请稍候。这是我将客户端的签名代码发送到服务器之前的代码:var date=new date(date.parse(sensorsData[0].MeasureDate)).toISOString();如你所见,我使用ISO。但仍然在web api中,它没有被解析
var dataToSendToServer=date.toISOString()
date=“Sat,2012年10月27日18:10:00 GMT”
-这不是ISO格式。ISO 8601将是
2012-10-27T18:10:00Z
请参阅提供给Wiki的有关ISO8601的链接。