Сравните дату и время без миллисекунды - PullRequest
16 голосов
/ 20 мая 2011

Мне нужно сравнить даты в двух отдельных списках.Каждый список состоит из объектов MyFile.Это класс, который я создал, чтобы иметь конкретную информацию о файле, такую ​​как имя, dateModified, расширение и т. Д. Единственная проблема заключается в том, что многие объекты MyFiles в моем втором списке (полученные с внешнего жесткого диска) неиметь штамп dateTime (LastWriteTime) до миллисекунды.Я считаю, что это причина, почему мое сравнение не работает.Например, вот пример неудачного сравнения: «Почему c # считает, что даты не равны?»Debug

a и b являются объектами MyFile, а класс MyFile содержит свойство ticks, которое равно file.LastWriteTime.Ticks. Они не используются в программе, которую я только что включил для отладки.Итак, после отладки несколько раз я понял, что последние 7 цифр представляют собой миллисекунды файла.В результате мое свойство ticks в MyFile теперь содержит 11 значащих цифр вместо 18 (примечание 18-11 = 7).Проблема заключается в том, что при сравнении тиков я получаю странные результаты, когда пытаюсь обновить свойство тиков путем деления на 10000000, а затем повторного умножения на 10000000. Так как мои свойства тиков длинны, то они потеряют последние 7 цифр, когдаделить.Я получаю меньше «ошибок».Но иногда я получаю что-то вроде этого: enter image description here

Здесь мы можем видеть, что даты совпадают, по крайней мере, до второго.Почему C # думает, что это не та же дата?Должен ли я создать свою собственную функцию «Ticks»?Я знаю, что преобразовываю dateTime в строку, затем сравниваю ее, но хочу иметь возможность узнать, является ли объект a.dateModified более новым, чем объект b.dateModified

1 Ответ

32 голосов
/ 20 мая 2011

Попробуйте сравнить с определенной точностью:

DateTime a, b;
// fill a and b with the values you need
if (Math.Abs((a-b).TotalSeconds) < 1)
    Console.WriteLine("File doesn't need to be copied");
else
    Console.WriteLine("File needs to be copied");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...