【问题标题】:Parsing DateTime with timezone offset with JSON.net使用 JSON.net 解析带有时区偏移的 DateTime
【发布时间】:2014-04-24 09:06:05
【问题描述】:

我调用了一个 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 部分

【问题讨论】:

    标签: c# json datetime json.net datetimeoffset


    【解决方案1】:

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

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

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

    • 1398859200000:自 Unix 纪元以来的毫秒数(在给定时刻,全世界都是一样的)
    • +1100:与 UTC 的本地偏移量

    区分这两个部分很重要 - 特别是要了解第一部分不受时区影响。

    【讨论】:

    • 每次您编辑答案时,我都在编辑我的评论.. 哈哈!无论如何.. 我使用的是 Epoch 转换器,并认为这就是我的困惑源于 - 我如何断言日期时间偏移已被解析为偏移(在本例中为 +1100)跨度>
    • @Alex:您可以将其创建为new DateTimeOffset(2014, 04, 30, 23, 0, 0, new TimeSpan(0, 11, 0, 0)); - 因为DateTimeOffset 构造函数需要本地 时间和与UTC 的偏移量。
    • 谢谢 Jon,local 时间是指(在这种情况下)开发人员机器上的时间...例如,如果开发人员在新加坡,检查代码并运行单元测试,它会失败?
    • @Alex:这是由值/Date(1398859200000+1100)/ 表示的当地时间。因此,对于产生该价值的任何事物来说,它都可能是本地的。它不依赖于您运行解析代码的系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2015-10-27
    • 2021-12-05
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多