Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
1
.NET 4.x

Сравнение DateTime даже одинакового времени возвращает False

17.12.2011, 02:45. Показов 2183. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По каким-то непонятным причинам не получается сравнить два DateTime. Вот два примера:

C#
1
2
3
4
5
            DateTime d1 = DateTime.UtcNow;
            DateTime d2 = DateTime.UtcNow;
            Console.WriteLine("{0}", DateTime.Compare(d1, d2));
            if (d1 == d2)
                Console.WriteLine("yes");
Отрабатывает как надо. Теперь вот этот:

C#
1
2
3
4
5
6
7
8
9
10
11
12
                        DateTime d1 = File.GetLastWriteTimeUtc(obj_fs.FullName);
                        DateTime d2 = File.GetLastWriteTimeUtc(dest_obj_fs);
                        int result = DateTime.Compare(d1, d2);
                        Console.WriteLine("\n{0}", result);
                        Console.WriteLine("{0} - {1}\n{2} - {3}", d1, obj_fs.FullName, d2, dest_obj_fs);
 
                        if (d1 == d2)
                        {
                            Console.WriteLine(" time f >>> ");
                            not_copy++;
                            continue;
                        }
(obj_fs - FileSystemInfo; dest_obj_fs - string)
Выводит на консоль

-1

11/20/2011 10:42:04 AM - c:\users\admin\Desktop\100D5000\_DSC7317.JPG
11/20/2011 10:42:04 AM - \\msk-backup-srv\backup.users\admin\profile\Desktop\100D5000\_DSC7317.JPG
Не могу понять почему вроде одно время но при сравнении всегда false. По теме нашел только одну тему.

Сравнивать можно по разному, например:

C#
1
2
3
4
if (obj_fs.LastWriteTimeUtc == File.GetLastAccessTimeUtc(dest_obj_fs))
{
  ...
}
Но результат всегда false. На вид вроде все верно, что я делаю не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2011, 02:45
Ответы с готовыми решениями:

File.Exists возвращает false, даже когда файл существует
Пишу программу, где в начале должна быть проверка на наличие файла. Код следующий namespace...

Сравнение времени DateTime.Now.Hour
foreach (Label item in groupBox1.Controls.OfType<Label>()) { ...

Doc.save(false, False) = Всегда Возвращает False
Собственно база находится локально - не реплика f = doc.save(false, false) когда документ...

Сравнение DateTime - Почему сравнение запаздывает на 1 мин
public DateTime NextShort(DateTime cur, int ofset, int period) { var temp =...

12
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
17.12.2011, 03:37 2
Время не ограничивается секундами.
Попробуйте вывести на консоль значение свойства Tick и посмотрите, одинаковы ли они.
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
17.12.2011, 22:59  [ТС] 3
Да, оно разное.

Вот при первом варианте что выдает

634596909535220230 634596765535225231
При втором:

634564999960000000 - c:\users\admin\Desktop\100D5000\_DSC7302.JPG
634564999969999999 - \\msk-backup-srv\backup.users\admin\profile\Desktop\100D5000\_DSC7302.JPG
634565000100000000 - c:\users\admin\Desktop\100D5000\_DSC7303.JPG
634565000109999999 - \\msk-backup-srv\backup.users\admin\profile\Desktop\100D5000\_DSC7303.JPG
634565000240000000 - c:\users\admin\Desktop\100D5000\_DSC7304.JPG
634565000249999999 - \\msk-backup-srv\backup.users\admin\profile\Desktop\100D5000\_DSC7304.JPG
Так почему в одном варианте true, при другом false? Это один файл, ранее скопированный.

Добавлено через 18 часов 54 минуты
Мда, действительно какая-то канетель. Если создать файл у себя на харде, сделать копию ticks один. А если скопировать его в сетевое хранилище меняется с 634597435182462636 на 634597435189999999. Не понимаю почему. Похоже самое простое это сравнить две строки (ToString()).
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
29.12.2011, 15:23  [ТС] 4
Опять вернулся к теме. Уже попробовал разные варианты и проверил в живую. Оказывается если шара виндовая, то время не меняется и все можно сравнить и проверить. Если шара где нить на юниксовом сетевом накопителе - все ломается. Разные ОС... И получается надо использовать что-то типа unix time. Хотя не совсем точно. Или делать MD5, например, что тяжело для крупных файлов. Много ресурсов потребуется.

Добавлено через 1 час 1 минуту
unix time не подходит в силу того, что время то уже испорчено и время от начала юних эры будет не верно... надо вручную выдергивать год, день и т.д. и сравнивать...
0
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
29.12.2011, 18:01 5
Сравнивай часы, минуты и секунды, а не весь класс полностью....
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
29.12.2011, 21:28  [ТС] 6
iTheSaboteur, я то и написал.
0
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
29.12.2011, 21:44 7
Извиняюсь, пропустил последние строки мимо глаз...
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
30.12.2011, 19:49 8
Тебе уже написали, DateTime - это сложная конструкция. Если хочешь сравнивать год, день, час, минуты то и сравнивай их, а не всю датувремя.
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
30.12.2011, 22:43  [ТС] 9
Да что ж такое. MVK, я уже так и написал... :-)
0
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
30.12.2011, 22:58 10
Надо ж, не только мне полностью сообщения читать лень..)
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
31.12.2011, 15:45 11
DateTime - сложная конструкция, а также отличается в разных ОС и в разных режимах модификации\перемещении. Если нужно сравнивать две DateTime "вроде" для одного файла из разных ОС, то сравнивайте поэлементно (год, месяц, день, час, ...). Тогда получится.
0
1 / 1 / 0
Регистрация: 23.05.2009
Сообщений: 43
31.12.2011, 17:41  [ТС] 12
Слов нет. Модераторы закройте тему )))))))
0
42 / 36 / 2
Регистрация: 18.12.2011
Сообщений: 113
31.12.2011, 17:47 13
Бот?))
0
31.12.2011, 17:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2011, 17:47
Помогаю со студенческими работами здесь

Сравнение текста в ячейках и присвоение одинаковым зн-ям одинакового ID
Здравствуйте! Помогите, пожалуйста, решить такую задачу: нужно сравнить текстовые значения в...

Запрос возвращает false
$link=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$link); $ta ...

Функция возвращает false
Смотрю через Debug, после return true в области try переходит на return false в catch (при этом...

Запрос возвращает false
Доброго времени суток. У меня проблема. Хочу чтобы функция возвращала количество новостей из базы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru