UtcNow и Теперь та же дата и время? Они знают, что отличаются?

Если я выполняю отрывок как:

bool areTheyTheSame = DateTime.UtcNow == DateTime.Now

что я получу? Возвращенные DateTime знают его часовой пояс, таким образом, что я могу выдержать сравнение?

Моя определенная проблема состоит в том, что я пытаюсь создать подобный кэшу API. Если это берет DateTime AbsoluteExpiration, я должен осуществить это, пользователи моего API знают, дать ли мне время UTC или находящееся на часовом поясе время?

[Редактирование] Это ТАК вопрос чрезвычайно относится к моей проблеме также: Кэш. Добавить абсолютное истечение - базирующийся UTC или нет?

[Редактирование] Просто для уточнения для будущих читателей, DateTimeKind - то, что отличается. Неопределенные DateTimeKind часто являются проблемой, которая является тем, что Вы получаете, когда Вы вытаскиваете один из базы данных, например. Установите DateTimeKind в конструкторе DateTime...

[Редактирование] JonSkeet записало прекрасное сообщение в блоге, осуждающее это поведение и предлагающее решение: http://noda-time.blogspot.co.uk/2011/08/what-wrong-with-datetime-anyway.html

5
задан Community 23 May 2017 в 10:27
поделиться

1 ответ

Вы сами пробовали этот фрагмент?

Они разные, и прямое сравнение не учитывает разницу, но вы можете преобразовать местное время в UTC, вызвав ToUniversalTime.

var now = DateTime.Now;
var utcNow = DateTime.UtcNow;

Console.WriteLine(now);                         // 12/07/2010 16:44:16
Console.WriteLine(utcNow);                      // 12/07/2010 15:44:16
Console.WriteLine(now.ToUniversalTime());       // 12/07/2010 15:44:16
Console.WriteLine(utcNow.ToUniversalTime());    // 12/07/2010 15:44:16

Console.WriteLine(now == utcNow);                         // False
Console.WriteLine(now.ToUniversalTime() == utcNow);       // True
Console.WriteLine(utcNow.ToUniversalTime() == utcNow);    // True
6
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: