#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
дату-время , а не UTC4. Что
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
дату.