【问题标题】:Timezone offset ignored忽略时区偏移
【发布时间】:2015-05-11 03:32:18
【问题描述】:

当下面的setter接收到json字符串中的endDate="2015-05-01T00:00:00+08:00"时,时区偏移量丢失,值为2015-05-01T00:00:00。当偏移量丢失时,我需要将日期调整为 UTC。

对象在使用 JSON.NET 的 WebAPI 格式化程序中自动反序列化

private DateTime? _endDate;
public DateTime? endDate
{
    get {
        //...
    }
    set { _endDate = value; }
}

出了什么问题,或者我怎样才能获得 UTC 时间?

【问题讨论】:

  • 执行 endDate.ToUniversalTime() 会得到什么?
  • 如果您想使用偏移量,可以使用 DateTimeOffset 来实现此目的。你有什么理由必须使用DateTime
  • @DWright 你是对的。偏移量是可用的,我只是在调试检查器中没有看到。
  • @JesseGood 因为数据库适配器在这种情况下(MongoDB)以不合需要的方式序列化了DateTimeOffset

标签: c# datetime asp.net-web-api json.net


【解决方案1】:

我相信您的意图如下:

private DateTime? date;
public DateTime? Date
{
     get
     {
          if(date != null)
               return TimeZoneInfo.ConvertToUtc(date);

          return date;           
     }
}

这将创建一个 Property,它将采用日期格式,然后将其转换为有效的 UTC 格式。但是,如果您需要更细致的控制,您将需要重新考虑该方法。您可以找到更多信息here

希望这就是您的实际要求,否则我将删除答案。

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 2019-12-04
    • 2015-05-11
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多