Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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
将JSON日期时间转换为C#并忽略时区?_C#_Json_Asp.net Web Api - Fatal编程技术网

将JSON日期时间转换为C#并忽略时区?

将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 下面是我的

我有一个场景,用户从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解析器中的任何日期设置

请注意,如果您的前端使用的是
,则这已提供给您。您不应该从该值创建JavaScript
Date
对象

但是,如果您使用的是其他日期选择器控件,它只返回一个
date
对象,那么您需要从中提取本地年份、月份和日期来构造返回字符串。像这样的库可以提供帮助,而且一些日期选择器可以在本地使用Moment


如果您希望在这方面获得更具体的建议,请提供有关日期选择器的更多信息。

您能否实现自己的
JsonConverter