从UTC转换回来

问题描述 投票:0回答:1

我正在处理来自世界各地的一些JSON日期,我以UTC形式收集日期但是,当我解析JSON数据时,它会忽略'Z',它会忘记它的UTC日期,并且日期kine是'local'而不是'utc',这很奇怪。似乎您需要传递CultureInfo.InvariantCulture,DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal部分以使其识别Z。因此,以防万一其他人遭受了痛苦,请尝试一下。

        DateTime expected = System.DateTime.UtcNow;
        // var isoDate = new Date('yourdatehere').toISOString(); 
        string isoDate = expected.ToString("u").Replace(' ', 'T'); //  eg "2020-05-04T09:24:03Z   vs 2020-05-04T10:24:03 BST

        DateTime actual = DateTime.Parse(isoDate); // should process the Z as its a GMT date zulu - FAIL
        actual = DateTime.ParseExact(isoDate,
            "yyyy-MM-ddTHH:mm:ssZ",
            CultureInfo.InvariantCulture,
            DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);// PASS
        Assert.IsTrue(expected.Hour == actual.Hour, "Essential Parsing of zulu date");
        Assert.IsTrue(actual.Kind == DateTimeKind.Utc ,"surely It must have seen the Z?");

        Assert.AreEqual(expected  ,actual ,"Back where we started");
c# json datetime utc
1个回答
0
投票

要观察的关键位是

  actual = DateTime.ParseExact(isoDate,
         "yyyy-MM-ddTHH:mm:ssZ",
        CultureInfo.InvariantCulture,
        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal );// PASS
© www.soinside.com 2019 - 2024. All rights reserved.