Не удалось преобразовать дату строки времени UTC в эпохальное время в C#

#c# #azure #datetime

#c# #лазурный #дата — время #azure #datetime

Вопрос:

Я прочитал проверку работоспособности Azure из azure с использованием rest api. Ниже приведен мой ответ

     {
           "name": "current",          
            "reasonType": "",
            "occuredTime": "2020-07-31T11:02:22Z",
            "reasonChronicity": "Persistent",
            "reportedTime": "2020-08-22T09:36:18.1858299Z"
        
    }
  

Я хочу преобразовать указанное время в формат epoch time.
мой код

 var azobject = saas.ToObject<JObject>();
var ty =  azobject["reportedTime"];
var ssa = DateTime.Parse(ty.ToString());

var dateTimeOffset = new DateTimeOffset(ssa);
var unixDateTime = dateTimeOffset.ToUnixTimeSeconds();
  

Значение совершенно другое, и оно всегда показывает местное время.После обработки этого кода значение формата azobject [«reportedTime»] полностью отличается от того, что я получаю из ответа ({22/08/2020 11:31:43 AM} есть T, а z отсутствует).

Комментарии:

1. Что вы имеете в виду здесь — «это всегда показывает местное время»? Что такое «ответ» в «После обработки этого кода значение формата azobject [«reportedTime»] полностью отличается от того, что я получаю из ответа»?

2. Пожалуйста, следуйте ответу, который я публикую, чтобы получить исходные данные.

3. I want to convert tthe reported time to epoch time format почему? Кроме того, строка JSON содержит значение со смещением, поэтому вам нужно DateTimeOffset.Parse , а не DateTime.Parse . Используемый вами код создает unspecified дату-время , а не UTC

4. Что ty такое? Почему вы используете ty.ToString() ? Если ty это строка, возвращаемая как объект, вам нужно только (string)ty . Если это DateTime или DateTimeOffset , вы можете просто использовать конкретный тип (после приведения)

5. Кстати, если saas это JToken производный метод, вам ToObject<JObject> тоже не нужен. Как вы вызвали API?

Ответ №1:

В основном это связано с тем, что пакет .net json переписывает метод преобразования типов. Если вы хотите получить тот же результат, что и оригинал, пожалуйста, сделайте это:

 using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "https://management.azure.com//subscriptions/xxxxxx?api-version=xxxx-xx-xx-xx";
            string tokenbear = "eyJ0exxxxxxPw";
            WebRequest request = HttpWebRequest.Create(url);
            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization =
                  new AuthenticationHeaderValue("Bearer", tokenbear);
                var test = client.GetAsync(url);
                var b = test.Result.Content.ReadAsStringAsync().Resu<
                JObject json = JObject.Parse(b);
                string test3 = json["properties"].ToString();
                Console.WriteLine(test3   "n");
                var settings = new JsonSerializerSettings
                {
                    DateFormatString = "yyyy-MM-ddTH:mm:ss.fffffffZ",
                    DateTimeZoneHandling = DateTimeZoneHandling.Utc
                };
                var test2 = json["properties"]["reportedTime"];
                var _test2 = JsonConvert.SerializeObject(test2, settings);
                _test2 = _test2.Replace(""", "");
                Console.WriteLine(_test2.ToString());
            }
        }
    }
}
  

Тогда вы получите то же значение, что и значение в вашем ответе:

введите описание изображения здесь

После получения исходных данных вы можете выполнить требуемую обработку. С моей стороны это не проблема, пожалуйста, попробуйте на своей стороне.

Комментарии:

1. В вопросе OP не используется JSON. Проблема вызвана тем, DateTime.Parse что возвращает Unspecified дату.