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

我有一个场景,用户从角度输入日期(例如 2018 年 11 月 30 日)。当我将此日期从 json 解析为 c# 时,它以 11/30/2018 4:00 或任何时区出现。如果我在像美国一样的 -UTC 时区,这很好。如果我在印度或日本有用户,则会转换为 2018 年 11 月 29 日 5:30。这不好。


无论用户居住在哪个时区,如何转换 json 并保留用户输入的日期?


如果用户在加利福尼亚州输入 11/30/2018,而用户在日本输入 11/30/2018,则两种情况下的最终结果都需要为 11/30/2018 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;

        }


倚天杖
浏览 104回答 4
4回答

Cats萌萌

实际上,请仔细检查您的 json 代码中的日期。我觉得它们可能已经在 javascript 中进行了转换。还将 jsonsettings 更改为public static JsonSerializerSettings GetJsonSettings()&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var settings = new JsonSerializerSettings&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateFormatHandling = DateFormatHandling.IsoDateFormat,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateTimeZoneHandling = DateTimeZoneHandling.Local,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DateParseHandling = DateParseHandling.DateTime&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return settings;&nbsp; &nbsp; &nbsp; &nbsp; }

炎炎设计

你可能会取得一些成功IsoDatetimeConverter。我会尝试这样的事情:var&nbsp;isoDateConverter&nbsp;=&nbsp;new&nbsp;IsoDateTimeConverter()&nbsp;{&nbsp;DateTimeFormat&nbsp;=&nbsp;"yyyy-MM-dd"&nbsp;}; var&nbsp;objMyModel&nbsp;=&nbsp;JsonConvert.DeserializeObject<List<MyModel>>(strChangedData,&nbsp;isoDateConverter);

慕村9548890

如果当前使用的是 DateTime,您可能想要MyModel使用 DateTimeOffset。您可以使用 获取日期.ToShortDateString(),但如果您不使用 DateTimeOffset,如果他们的用户位于不同的时区,您可能会无意中更改日期。这是一个例子:https ://dotnetfiddle.net/OA06L9

慕村225694

如果您的用户选择了一个日期,您不应该发回日期和时间以及时区偏移量。只需发送日期:{"EndDt":"2018-11-30"}然后,您无需更改 Json 解析器中的任何默认日期设置。请注意,如果您的前端正在使用,则该属性已在属性<input type="date">中提供给您。您不应从该值创建 JavaScript 对象。valueDate但是,如果您使用的其他日期选择器控件只返回一个Date对象,那么您需要从中提取本地年、月和日期来构造返回字符串。Moment.js 之类的库可以提供帮助,一些日期选择器可以原生使用 Moment。如果您在这方面需要更具体的建议,请提供有关您的日期选择器的更多信息。
打开App,查看更多内容
随时随地看视频慕课网APP