Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос | Равные даты считает разными 
V
    Опции темы
VOX
Дата 23.7.2009, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



В данном коде сравниваются даты локальной файловой базы с той, которая на фтп.
Какая позже, а какая раньше- определяется нормально, но если они равны,
пишет, что локальная бд модифицировалась позже. Прошу помощи, спасибо!
Код

    IdFTP1->Get("ftp\\database.mdb" ,"temp\\database.mdb",true);
    //ADOConnection1->Connected = False;
    // Синхронизируем данные с сервером
    // Узнаем дату для Базы1
    WIN32_FILE_ATTRIBUTE_DATA fad;
    if (GetFileAttributesEx("data\\database.mdb", GetFileExInfoStandard,&fad))
    {
        SYSTEMTIME st;
        FILETIME ft;
        FileTimeToLocalFileTime(&fad.ftLastWriteTime, &ft);
        FileTimeToSystemTime(&ft, &st);
        TDateTime dt = SystemTimeToDateTime(st);
        //ShowMessage(dt.DateTimeString());
        //Статичная сверка дат
        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        //TDateTime D1(dt), D2= ("16.04.2009 14:39:57") ;
        //ShowMessage((D1==D2)?"Совпадают":"Не совпадают");
            //if (D1==D2)
            //{
                // код если даты равны
                //ShowMessage ("Без изменений") ;
            //}
        // Узнаем дату для Базы2
        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        //WIN32_FILE_ATTRIBUTE_DATA fad2;
        //if (GetFileAttributesEx("temp\\database.mdb", GetFileExInfoStandard,&fad2))
        //{
        //    SYSTEMTIME st2;
        //    FILETIME ft2;
        //    FileTimeToLocalFileTime(&fad2.ftLastWriteTime, &ft2);
        //    FileTimeToSystemTime(&ft2, &st2);
        //    TDateTime dt2 = SystemTimeToDateTime(st2);
        //    ShowMessage(dt2.DateTimeString());
            TDateTime D1(dt),D2(IdFTP1->FileDate("ftp\\database.mdb\\")) ;
            //ShowMessage((D1==D2)?"Совпадают":"Не совпадают");
            //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
            ShowMessage (D1);
            ShowMessage (D2);

                if (D1==D2)
                    {
                        // код если даты равны
                        // если да, то месагу, что
                        // синхронизация не требуется
                        ShowMessage ("даты равны") ;
                    }
                    else
                        // если БД1 модифицировалась позже,
                        // то заливаем ее на фтп
                        if (D1>D2)
                        {
                            ShowMessage ("Локальная База модифицировалась позже") ;
                            //IdFTP1->Put ("data\\database.mdb" , "ftp\\database.mdb" ,true);
                        }
                        else
                            // если БД2 модифицировалась позже,
                            // то скачиваем ее с фтп в папку data
                            // или переносим их темпа в дата
                            if (D1<D2)
                            {
                                ShowMessage ("Удаленная База модифицировалась позже") ;
                                //IdFTP1->Get("ftp\\database.mdb" ,"data\\database.mdb",true);
                            }
            }
    }


Добавлено через 4 минуты и 33 секунды
там коменты к  коду устаревшие немного, на них лучше не ориентироваться особо
PM MAIL   Вверх
sawfish
Дата 23.7.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Почему Вы решили, что они равны? Выводя ShowMessage (D1); ShowMessage (D2);? А в каком виде они выводятся? Если в виде ДД.ММ.ГГ, то они будут равны, но там еще миллисекунды есть, которые не показываются. Попробуйте сравнить без миллисекунд.
PM MAIL   Вверх
VOX
Дата 23.7.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Я не знал, что еще милисекунды учитываются, подскажите как выдернуть и в шоумесадже показать.
Хотя странно, веди я на фтп скопировал тот же файл, как же тут может быть разным значение модификации?
PM MAIL   Вверх
mrbrooks
Дата 23.7.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(sawfish @  23.7.2009,  09:20 Найти цитируемый пост)
Выводя ShowMessage (D1); ShowMessage (D2);

Так выводить конечно не стоит. 
Лучше так:
Код

ShowMessage (D1.FormatString("hh:nn:ss.zzz dd.mm.yyyy") +'\n'+D2.FormatString("hh:nn:ss.zzz dd.mm.yyyy"));  


метка будет час:минута:секунда.миллисекунда день.месяц.год. Так уже смотреть и сравнивать визуально удобнее.
PM MAIL   Вверх
VOX
Дата 23.7.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



user posted image

Правда милисекунды, более чем удивлен, что они учитываются.
Странно, ведь я не модифицирую, а просто копирую файл... почему так?
Возможно ли как то при сравнении дат отсечь милисекунды?

Добавлено через 1 минуту и 25 секунд
Да, ребят, спасибо за помощь!
PM MAIL   Вверх
sawfish
Дата 23.7.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Да, возможно. Перед сравнением обнулите датам миллисекунды например вот так: Дата=RecodeMilliSecond(Дата, 0).
PM MAIL   Вверх
VOX
Дата 23.7.2009, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Всё сделал, спасибо! Работает!
Только вот помучался, подключать надо 
Код

#include "dateutils.hpp"

а я просто .h
А может кто подскажет, почему так происходит, что добавляютя миллисекунды?
PM MAIL   Вверх
sawfish
Дата 23.7.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Они не добавляются, они там есть всегда. Тип TDateTime такой.
PM MAIL   Вверх
VOX
Дата 23.7.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Я имею в виду, почему милисекунды разные
PM MAIL   Вверх
sawfish
Дата 23.7.2009, 10:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 30.7.2008
Где: Новосибирск

Репутация: 8
Всего: 8



Могу только предположить, что копирование файла есть тип модификации (для ОС).
PM MAIL   Вверх
VOX
Дата 23.7.2009, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 297
Регистрация: 21.1.2009

Репутация: 1
Всего: 1



Понял, спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1239 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.