0

Сервер отдаёт дату вот в таком формате: 2015-04-24T07:00:51Z. Мне нужно узнать, не старше ли эта дата, например, трёх дней. Код ниже, естественно, не работает. Вероятно, дело в CultureInfo, но как мне тогда привести всё к общему знаменателю (формат выдачи сервером)? Или проблема в ином?

if ( (DateTime.UtcNow - stuff["query"]["users"][0]["registration"]).TotalDays < 3 )

Заране благодарен за помощь.

Turambar
  • 373
  • 1
    Насколько я понимаю, сервер отдает дату в string формате (если вытянуть ее из json). А Вы хотите ее сравнить с DateTime форматом. Попробуйте использовать методы DateTime.TryParce() (https://msdn.microsoft.com/ru-ru/library/ch92fbc1(v=vs.110).aspx) или DateTime.TryParceExact() (https://msdn.microsoft.com/ru-ru/library/system.datetime.tryparseexact(v=vs.110).aspx) а уже после сравнивать – foxhound Jul 08 '18 at 15:50
  • @foxhound вы правы в части того, что нужно преобразовать строку в дату. но вот делать то лучше описав формат json и передав его парсерам json, чем выковыривать разные кусочки через try parse. – A K Jul 08 '18 at 16:15

1 Answers1

4

Используйте Json.Net для работы, он вам сам сконвертирует в дату.

var source = "{\"batchcomplete\":\"\",\"query\":{\"users\":[{\"userid\":24920566,\"name\":\"Example\",\"regist" +
    "ration\":\"2015-04-24T07:00:51Z\"}]}}";
var data = JsonConvert.DeserializeObject<Abc>(source);
data.Dump();
data.Query.Users[0].Registration.Dump();

Вспомогательные классы создал сервисом:

public partial class Abc
{
    [JsonProperty("batchcomplete")]
    public string Batchcomplete { get; set; }
[JsonProperty(&quot;query&quot;)]
public Query Query { get; set; }

}

public partial class Query { [JsonProperty("users")] public User[] Users { get; set; } }

public partial class User { [JsonProperty("userid")] public long Userid { get; set; }

[JsonProperty(&quot;name&quot;)]
public string Name { get; set; }

[JsonProperty(&quot;registration&quot;)]
public DateTimeOffset Registration { get; set; }

}

Вывод linqpad:

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

Библиотека Json.Net умеет распознавать даты разных форматов, также можно написать собственные парсеры, например вот или посмотрите на en so.

A K
  • 28,718
  • Смотрел кстати тоже на результат этого сайта, не как не могу понять, почему именно DateTimeOffset использует, ведь обычный DateTime вполне будет рабочим вариантом? – EvgeniyZ Jul 08 '18 at 16:12