C# 向Web API控制器发送ISO格式的日期时出现日期值问题
我正在使用Angular资源将JSON格式的数据发布到我的Web API控制器。post包含一个日期字段,我在其中传递ISO、UTC格式的日期值,如下所示:C# 向Web API控制器发送ISO格式的日期时出现日期值问题,c#,angularjs,datetime,asp.net-web-api2,C#,Angularjs,Datetime,Asp.net Web Api2,我正在使用Angular资源将JSON格式的数据发布到我的Web API控制器。post包含一个日期字段,我在其中传递ISO、UTC格式的日期值,如下所示: 2016-05-01T07:00:00.000Z 但是,当我在对象到达Web API控制器时检查该对象时,日期值将转换为不正确的DateTime值: 5/1/2016 7:00:00 AM 何时应该: 5/1/2016 12:00:00 AM 如果我错了,请纠正我,但我认为值应该是这个,因为如果我执行语句DateTime.Parse(
2016-05-01T07:00:00.000Z
但是,当我在对象到达Web API控制器时检查该对象时,日期值将转换为不正确的DateTime
值:
5/1/2016 7:00:00 AM
何时应该:
5/1/2016 12:00:00 AM
如果我错了,请纠正我,但我认为值应该是这个,因为如果我执行语句DateTime.Parse(“2016-05-01T07:00:00.000Z”)代码>我得到以下值:5/1/2016 12:00:00 AM
我已经阅读了互联网上的各种帖子,包括SO,但还没有找到一个解决方案,以ISO格式发布日期,并成功地将其转换为正确的日期时间值
我所尝试的:
我尝试过各种方法,比如在我的WebApiConfig.cs
文件中添加以下设置:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
config.Formatters.JsonFormatter.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
我还尝试了一个修复,在我的WebApiConfig.cs
文件中添加了以下行:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;
config.Formatters.JsonFormatter.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
我的Web.config的这一行:
<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US"/>
我知道我可以将保存DateTime值的属性更改为字符串,并使用从ISO日期值生成DateTime值的DateTime.Parse(dateTimeString)
方法,但我希望避免在模型中指定了许多DateTime对象的应用程序中这样做
SO上的大多数帖子都必须处理DateTime
对象的响应格式不正确的问题,但我只是在发送请求时没有找到问题的答案。可能是您在本地时间查看它,因为您似乎是以UTC的形式发送的。@Darroll我曾有过同样的想法,所以我尝试了类似这样的方法,myDateTime.TouniVersaTime()
产生了5/1/2016 7:00:00 AM
,使用ToLocalTime()
产生了5/1/2016 12:00:00 AM
,这也不正确。让我相信有什么不对的是,如果我执行以下语句:DateTime.Parse(“2016-05-01T07:00:00.000Z”)
我得到了一个DateTime
值,即5/1/2016 12:00:00 AM
,这是我所期望的。可能是您在本地时间查看它,因为它看起来是以UTC的形式发送的。@Darroll我曾有过同样的想法,所以我尝试了类似的方法,myDateTime.ToUniversalTime()
产生的值为5/1/2016 7:00:00 AM
,使用ToLocalTime()
产生的5/1/2016 12:00:00 AM
也不正确。让我相信有什么不对的是,如果我执行以下语句:DateTime.Parse(“2016-05-01T07:00:00.000Z”)
我得到了一个DateTime
值5/1/2016 12:00:00 AM
,这是我所期望的。