【发布时间】:2014-02-07 20:53:45
【问题描述】:
我正在使用一个名为 Json.NET 的库,它在内部使用以下代码将 JSON 字符串解析为 DateTime:
if (DateTime.TryParse(s, Culture, DateTimeStyles.RoundtripKind, out dt))
{
dt = DateTimeUtils.EnsureDateTime(dt, DateTimeZoneHandling);
SetToken(JsonToken.Date, dt);
return dt;
}
我认为 Json.NET 搞砸了转换,但看起来是 DateTime.TryParse 本身破坏了值。
当我解析以下有效的 Iso 日期(对应于 UTC DateTime.MinValue)时:
string json = "0001-01-01T00:00:00+00:00";
DateTime dt;
DateTime.TryParse(json, invariantCulture, DateTimeStyles.RoundtripKind, out dt);
结果是本地化的 DateTime:{0001-01-01 8:00:00 PM},当转换回 Utc 时间时,它会得到 {0001-01-02 0:00:00 PM}。本质上,日期下溢,这正是您希望 DateTimeStyles.RoundtripKind 避免的问题。
如何避免这种情况?
【问题讨论】:
标签: c# json datetime .net-4.0 json.net