为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
倚天杖 2022-10-23 13:36:21
我有一个场景,用户从角度输入日期(例如 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;        }
查看完整描述

4 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

实际上,请仔细检查您的 json 代码中的日期。我觉得它们可能已经在 javascript 中进行了转换。


还将 jsonsettings 更改为


public static JsonSerializerSettings GetJsonSettings()

        {

            var settings = new JsonSerializerSettings

            {

                DateFormatHandling = DateFormatHandling.IsoDateFormat,

                DateTimeZoneHandling = DateTimeZoneHandling.Local,

                DateParseHandling = DateParseHandling.DateTime

            };


            return settings;

        }


查看完整回答
反对 回复 2022-10-23
?
炎炎设计

TA贡献1808条经验 获得超4个赞

你可能会取得一些成功IsoDatetimeConverter。我会尝试这样的事情:

var isoDateConverter = new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-dd" };
var objMyModel = JsonConvert.DeserializeObject<List<MyModel>>(strChangedData, isoDateConverter);


查看完整回答
反对 回复 2022-10-23
?
慕村9548890

TA贡献1884条经验 获得超4个赞

如果当前使用的是 DateTime,您可能想要MyModel使用 DateTimeOffset。您可以使用 获取日期.ToShortDateString(),但如果您不使用 DateTimeOffset,如果他们的用户位于不同的时区,您可能会无意中更改日期。

这是一个例子:https ://dotnetfiddle.net/OA06L9


查看完整回答
反对 回复 2022-10-23
?
慕村225694

TA贡献1880条经验 获得超4个赞

如果您的用户选择了一个日期,您不应该发回日期和时间以及时区偏移量。只需发送日期:

{"EndDt":"2018-11-30"}

然后,您无需更改 Json 解析器中的任何默认日期设置。

请注意,如果您的前端正在使用,则该属性已属性<input type="date">中提供给您。您不应从该值创建 JavaScript 对象。valueDate

但是,如果您使用的其他日期选择器控件只返回一个Date对象,那么您需要从中提取本地年、月和日期来构造返回字符串。Moment.js 之类的库可以提供帮助,一些日期选择器可以原生使用 Moment。

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


查看完整回答
反对 回复 2022-10-23
  • 4 回答
  • 0 关注
  • 99 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信