使用JSON.net解析带有时区偏移的DateTime

时间:2014-03-18 15:14:48

标签: c# json datetime json.net datetimeoffset

我调用一个Web服务,该服务返回一个项目,其中一个属性是:

"startDate":"/Date(1398859200000+1100)/"

在我的C#表示中,我有:

public class MyClass 
{
    public DateTimeOffset StartDate {get; set;}
}

在我的单元测试中,我有以下断言

var expectation = 
    new DateTimeOffset(2014, 04, 30, 12, 0, 0, new TimeSpan(0, 11, 0, 0));

Assert.That(specialOfferContent.End, Is.EqualTo(expectiation).Within(1).Seconds);

(不确定是否有更好的方法来断言...)

如果使用(不指定DateParseHandling)从JSON反序列化,我得到的结果是:

  

预计:2014年4月30日12:00:00 +11:00 +/- 00:00:01
  但是:04/30/2014 13:00:00 +01:00

或者,如果我将DateParseHandling指定为DateParseHandling.DateTimeOffset,我会得到:

  

预计:2014年4月30日12:00:00 +11:00 +/- 00:00:01
  但是:04/30/2014 23:00:00 +11:00

我的问题是,我做错了什么? 它忽略了我执行日期的+1100部分

1 个答案:

答案 0 :(得分:2)

你的期望基本上是不正确的。

您提供的价值是 04/30/2014 23:00:00 +11:00 - 因为它的UTC 04/30 / 2014T12:00:00 (经Epoch Converter验证),但本地偏移量为+11小时。所以当地时间是晚上11点。

在您的输入中,有两个数据:

  • 1398859200000:自Unix时代以来的毫秒数(在特定时刻,这将在全世界范围内相同)
  • +1100:UTC的本地偏移量

区分这两个部分非常重要 - 尤其要理解第一部分受时区影响。