Если я выполняю отрывок как:
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
Вы сами пробовали этот фрагмент?
Они разные, и прямое сравнение не учитывает разницу, но вы можете преобразовать местное время в 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