C# 为什么我的日期值在web api函数中解析不正确?
我从客户端向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
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标准的字符串发送,则无论哪种方式,日期/时间都将正确具体化
这一点也很重要
扼要重述
- 始终在客户端之间使用
(到客户端通常由Web API中的JSON格式化程序自动处理)ISO-8601
- 始终在模型中直接使用
或DateTimeOffset
实例DateTime
var dataToSendToServer=date.toISOString()
date=“Sat,2012年10月27日18:10:00 GMT”
-这不是ISO格式。ISO 8601将是2012-10-27T18:10:00Z
请参阅提供给Wiki的有关ISO8601的链接。