Сравнение объектов DateTime - PullRequest
2 голосов
/ 07 июля 2011

Цель - выяснить, какой DateTime является более поздним.

Можно ли выяснить это с помощью следующего кода:

DateTime dt1 = new DateTime(...); //let's say it was created on 1/1/2000

DateTime dt2 = new DateTime(...); //let's say it was create on 1/1/2011 

if (dt2.ToBinary() > dt1.ToBinary()) {
print dt2 is newer than dt1 }

Могу ли я просто преобразовать объекты DateTime в двоичный файл, а затем предположить, чточем больше, тем новее?

Спасибо, Кевин

Ответы [ 5 ]

8 голосов
/ 07 июля 2011
if (dt2 > dt1) {
print dt2 is newer than dt1 }

должно быть достаточно, поскольку DateTime перегружает операторы сравнения.

4 голосов
/ 07 июля 2011

Обычно вы можете добиться большего успеха:

if (dt2 > dt1)

Хитрость учитывает часовые пояса ... вы можете использовать

if (dt2.ToUniversalTime() > dt1.ToUniversalTime())

но только если вы знаете, что любое "местное" время действительно локально в часовом поясе системы.

Даты и время в .NET немного беспорядочные: (

3 голосов
/ 07 июля 2011

Нет, вы не можете.ToBinary() возвращает внутренний формат, в котором также хранится информация о часовом поясе.

Вместо этого вы можете сравнивать DateTime с напрямую:

if (dt2 > dt1)

DateTime перегружает операторы сравнения.

Вы можете сравнить свойство Ticks, но не стоит беспокоиться.

1 голос
/ 07 июля 2011

Вы можете использовать Datetime.Compare

int iDiff = DateTime.Compare(new DateTime(2011, 02, 28), new DateTime(2011, 01, 30));

-1 = первая дата меньше второй
0 = первая дата равна второй
1 = первая датабольше второго

0 голосов
/ 07 июля 2011

DateTime объекты сопоставимы сами по себе, поэтому

if (dt1>dt2)
  Console.WriteLine('dt1 is newer');
else if (dt1>dt2)
  Console.WriteLine('dt2 is newer');
else // they are equal
  Console.WriteLine('dt1 and dt2 are the same');

также будет работать.
Кроме того, DateTime реализует интерфейс IComparable<DateTime>, поэтому вы можете сделать:

int result = dt1.CompareTo(dt2);
if (result > 0)
  Console.WriteLine('dt1 is newer');
else if (result < 0)
  Console.WriteLine('dt2 is newer');
else // result = 0
  Console.WriteLine('dt1 and dt2 are the same');

РЕДАКТИРОВАТЬ: Это игнорирует часовые пояса, местное время и т. Д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...