【问题标题】:DateTimeZoneHandling.RoundtripKind is not preserved datetime timezoneDateTimeZoneHandling.RoundtripKind 不保留日期时间时区
【发布时间】:2015-05-06 00:57:25
【问题描述】:

我有以下代码:

                JsonReader reader = new JsonTextReader(new    StringReader(content.ToString()));
                reader.DateTimeZoneHandling =            DateTimeZoneHandling.RoundtripKind;
                reader.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                reader.DateParseHandling = DateParseHandling.DateTime;
                 myObj = JObject.Load(reader);

尽管使用了 DateTimeZoneHandling.RoundtripKind;仍然是转换为本地时区的日期。例如:

   "2015-02-02T12:01:14.548-0500"

改为:

   "2015-02-02T11:01:14.548-0500",

【问题讨论】:

  • 有什么想法吗?或建议使用其他方法...
  • 您能否创建一个重现问题的Minimal, Complete, and Verifiable example,最好包括初始 JSON?我只是试图用一个非常简单的测试用例来重现这一点,但不能。

标签: c# json json.net date-formatting


【解决方案1】:

.net 已知问题 (more about it)

一种可能的解决方法是使用 DateTimeOffset 正确解析日期,然后使用方法将其转换回 DateTime

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime)
{
    if (dateTime.Offset.Equals(TimeSpan.Zero))
        return dateTime.UtcDateTime;
    else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
        return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
    else
      return dateTime.DateTime;   //Kind = Unspecified
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2017-09-10
    • 2021-11-10
    • 2022-01-13
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多