Конвертация обратно из UTC - PullRequest
0 голосов
/ 04 мая 2020

Я обрабатываю некоторые JSON даты, которые приходят со всего мира, и я собираю даты как UTC. Но когда я анализирую JSON данные, он игнорирует 'Z', он забывает, что это дата UT C и дата kine 'local' не 'ut c', что нечетно. Казалось бы, вам нужно передать в CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToУниверсальные части, чтобы заставить его распознавать 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");

1 Ответ

0 голосов
/ 04 мая 2020

Ключевой бит для наблюдения:

  actual = DateTime.ParseExact(isoDate,
         "yyyy-MM-ddTHH:mm:ssZ",
        CultureInfo.InvariantCulture,
        DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal );// PASS
...