【发布时间】:2015-01-18 12:40:30
【问题描述】:
我正在使用 JSON.NET 在 C# 中解析一些 JSON。 JSON 中的字段之一是日期/时间,如下所示:
{
"theTime":"2014-11-20T07:15:11-0500",
// ... a lot more fields ...
}
请注意,时间部分是 07:15:11(格林威治标准时间 5 小时的 TZ)
我从这样的流中解析 JSON:
using (var streamReader = new StreamReader(rcvdStream))
{
JsonTextReader reader = new JsonTextReader(streamReader);
JsonSerializer serializer = new JsonSerializer();
JObject data = serializer.Deserialize<JObject>(reader);
//...
}
然后访问时间:
DateTime theTime = (DateTime)data["theTime"];
但是,这给了我这个 DateTime 对象:
{20/11/2014 12:15:11}
Date: {20/11/2014 00:00:00}
Day: 20
DayOfWeek: Thursday
DayOfYear: 324
Hour: 12
Kind: Local
Millisecond: 0
Minute: 15
Month: 11
Second: 11
Ticks: 635520825110000000
TimeOfDay: {12:15:11}
Year: 2014
我需要知道原始的本地时间和 tz 偏移量,但我似乎在反序列化过程中丢失了该信息,它给了我我认为是本地时间的时间(我在英国,所以目前在 GMT+0)。
有没有办法在反序列化时保留时区信息?
编辑:添加了有关我如何反序列化的更多详细信息。
【问题讨论】:
-
你是如何创建你的
serializer对象的? -
您是否尝试过将其反序列化/强制转换为 DateTimeOffset 而不是 DateTime?
-
我建议转换为 UTC,以 UTC 发送/接收,并在客户端转换为本地时间以进行显示。
-
请注意,该帖子建议作为该帖子的副本,虽然它最初询问时区代码,但它有您正在寻找的答案:您的字符串具有时区偏移量,它显示了如何正确解析包含时区偏移量的
DateTime。 -
我不同意这是一个重复的问题。链接到的另一个答案是关于解析 DateTime 但不是来自 Json 反序列化器。为此,他必须将反序列化器更改为仅将日期作为字符串返回,然后在需要的地方解析字符串。
serializer.DateParseHandling = DateParseHandling.None;
标签: c# datetime timezone json.net deserialization