gpt4 book ai didi

c# - 如何使用 Newtonsoft.JSON JObject 获得一致的日期时间值

转载 作者:行者123 更新时间:2023-12-05 04:10:37 25 4
gpt4 key购买 nike

我有一个 ASP.Net Core 服务,它使用 Newtonsoft.Json 库来处理 JSON 数据。示例 JSON 输入有一个字符串,其中包含一个 ISO8601 格式的日期值。但是,我观察到为等效日期返回不同的日期时间值。这是示例代码 -

    var jsonString = @"{
""data"": {
""name"": ""John Doe"",
""dateOfBirth"": ""1990-05-25T15:54:49.119+00:00""
}
}";

var jsonObj = JObject.Parse(jsonString);
var person = jsonObj.ToObject<Person>();

DateTime dateOfBirth = DateTime.Parse(person.Data.DateOfBirth);
if (dateOfBirth.Kind != DateTimeKind.Utc)
{
dateOfBirth = dateOfBirth.ToUniversalTime();
}
Console.WriteLine("Date of birth is " + dateOfBirth.ToString("o"));

Person类是这样的——

class Person
{
public PersonalData Data;
}

class PersonalData
{
public string Name { get; set; }
public string DateOfBirth { get; set; }
}

如果我提供 ""dateOfBirth"": ""1990-05-25T15:54:49.119+00:00"",输出是 -

Date of birth is 1990-05-25T15:54:49.0000000Z

如果我提供 ""dateOfBirth"": ""1990-05-25T15:54:49.119Z"",输出是 -

Date of birth is 1990-05-25T10:24:49.0000000Z

可以看出,输出结果不同,但本应相同。调用者可以设置任何 ISO8601 格式的日期时间字符串。

有什么方法可以一致地处理这个问题吗?

最佳答案

这是因为 DateTime.Parse() 考虑了系统时区(您运行此代码的计算机)

解决方法在这里

   var jsonString = @"{
""data"": {
""name"": ""John Doe"",
""dateOfBirth"": ""1990-05-25T15:54:49.119+00:00""
}
}";
var jsonObj = JObject.Parse(jsonString);
var person = jsonObj.ToObject<Person>();

var dateTimeOffset = DateTimeOffset.Parse(person.Data.DateOfBirth, CultureInfo.InvariantCulture);
DateTime dateOfBirth = dateTimeOffset.UtcDateTime;
Console.WriteLine("Date of birth is " + dateOfBirth.ToString("o"));

关于c# - 如何使用 Newtonsoft.JSON JObject 获得一致的日期时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com