将JSON日期时间转换为C#并忽略时区?
我有一个场景,用户从angular输入日期(例如2018年11月30日)。当我将这个日期从json解析为c时,它出现在2018年11月30日4:00或任何时区。如果我在一个像美国一样的UTC时区,这很好。如果我在印度或日本有用户,则转换为2018年11月29日5:30。这不好 如何转换json并保留用户输入的日期,而不管用户位于哪个时区 如果用户在加利福尼亚州输入2018年11月30日,在日本输入2018年11月30日,则在这两种情况下,最终结果都需要为2018年11月30日0:00 下面是我的转换代码将JSON日期时间转换为C#并忽略时区?,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我有一个场景,用户从angular输入日期(例如2018年11月30日)。当我将这个日期从json解析为c时,它出现在2018年11月30日4:00或任何时区。如果我在一个像美国一样的UTC时区,这很好。如果我在印度或日本有用户,则转换为2018年11月29日5:30。这不好 如何转换json并保留用户输入的日期,而不管用户位于哪个时区 如果用户在加利福尼亚州输入2018年11月30日,在日本输入2018年11月30日,则在这两种情况下,最终结果都需要为2018年11月30日0:00 下面是我的
strChangedData = [{\"EndDt\":\"2018-11-30T04:00:00.000Z\"}]
List<MyModel> objMyModel = (List<MyModel>)Newtonsoft.Json.JsonConvert.DeserializeObject(strChangedData,
typeof(List<MyModel>), GetJsonSettings());
public static JsonSerializerSettings GetJsonSettings()
{
var settings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
DateParseHandling = DateParseHandling.DateTime
};
return settings;
}
strchangedata=[{\'EndDt\':\'2018-11-30T04:00:00.000Z\']
List objMyModel=(List)Newtonsoft.Json.JsonConvert.DeserializeObject(strChangedData,
typeof(List),GetJsonSettings());
公共静态JsonSerializerSettings GetJsonSettings()
{
var设置=新的JsonSerializerSettings
{
DateFormatHandling=DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling=DateTimeZoneHandling.Utc,
DateParseHandling=DateParseHandling.DateTime
};
返回设置;
}
如果MyModel当前使用的是DateTime,您可能希望它使用DateTimeOffset。
您可以使用.toSortDateString()
获取日期,但如果用户位于不同的时区,如果您不使用DateTimeOffset,则可能会无意中更改日期
下面是一个例子:您可能会在这方面取得一些成功。我想试试这样的东西:
var isoDateConverter = new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" };
var objMyModel = JsonConvert.DeserializeObject<List<MyModel>>(strChangedData, isoDateConverter);
var isoDateConverter=new IsoDateTimeConverter(){DateTimeFormat=“yyyy-MM-dd”};
var objMyModel=JsonConvert.DeserializeObject(strChangedData,isoDateConverter);
实际上,仔细检查json代码中的日期。我觉得它们可能已经被转换成javascript了
同时将jsonsettings更改为
public static JsonSerializerSettings GetJsonSettings()
{
var settings = new JsonSerializerSettings
{
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateTimeZoneHandling = DateTimeZoneHandling.Local,
DateParseHandling = DateParseHandling.DateTime
};
return settings;
}
如果用户选择了日期,则不应发回日期、时间和时区偏移。只需发送日期:
{"EndDt":"2018-11-30"}
然后,不需要更改Json解析器中的任何日期设置
请注意,如果您的前端使用的是
,则这已提供给您。您不应该从该值创建JavaScriptDate
对象
但是,如果您使用的是其他日期选择器控件,它只返回一个date
对象,那么您需要从中提取本地年份、月份和日期来构造返回字符串。像这样的库可以提供帮助,而且一些日期选择器可以在本地使用Moment
如果您希望在这方面获得更具体的建议,请提供有关日期选择器的更多信息。您能否实现自己的
JsonConverter
?