Подтвердить что ты не робот

Сравнение datetime без миллисекунды

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

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

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

4b9b3361

Ответ 1

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

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");