Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно сравнивать даты? не думал, что так сложно 
:(
    Опции темы
MacTep
Дата 14.5.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Почему не работает код?
Код

procedure TForm1.Button1Click(Sender: TObject);
var d1,d2:TDate;
    kol:integer;
begin
  d1:=StrToDate('03.01.1985');
  d2:=StrToDate('05.01.1985');
  if d2>d1 then
    kol:=kol+1;
end;
Чему будет равно значение переменной kol? И как сделать так, чтобы  оно стало в результате сравнения равно 1. smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Snowy
Дата 14.5.2007, 13:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Ну во-первых использование текстовой записи даты чревато граблями с региональными настройками.

Цитата(MacTep @  14.5.2007,  13:04 Найти цитируемый пост)
Чему будет равно значение переменной kol?
А вот это хороший вопрос... Знаешь задачку про яблоки?
Пете дали 3 яблока, потом одно забрали. Сколько стало яблок у Пети?
Два? Неверно. Правильный ответ зависит от того, сколько яблок у Пети было до этого.
Мораль: инициализируйте переменные.

Цитата(MacTep @  14.5.2007,  13:04 Найти цитируемый пост)
 И как сделать так, чтобы  оно стало в результате сравнения равно 1.
kol := 1; smile

Добавлено через 2 минуты и 2 секунды
Цитата(MacTep @  14.5.2007,  13:04 Найти цитируемый пост)
Почему не работает код?
А что он должен делать?
PM MAIL   Вверх
ama_kid
Дата 14.5.2007, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата(MacTep @  14.5.2007,  13:04 Найти цитируемый пост)
Как правильно сравнивать даты?

Код
  TDate = type TDateTime;
  TDateTime = type Double;

Даты - де-факто это есть дабл... Следовательно, сравнивать их можно так же как и обычные даблы... А если учесть, что дата - это целая часть дабла, то можно сделать trunc и сравнивать как integer (если уж поизвращаться есть желание)...
Цитата
Почему не работает код?
У меня он работает (я только добавил инициализацию)...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MacTep
Дата 14.5.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



добавляю строку 
Код

kol:=0;
, а компилятор говорит, что эта строка вообще не выполняется. У меня после выполнения кода должно быть значение переменно равное 1. Такого почему-то не происходит. Вот код, который так и не работает:
Код

procedure TForm1.Button1Click(Sender: TObject);
var d1,d2:TDate;
    kol:integer;
begin
  kol:=0;
  d1:=StrToDate('03.01.1985');
  d2:=StrToDate('05.01.1985');
  if d2>d1 then
    kol:=kol+1;
end;
Здесь, kol не равен 1. Он остается 0.
А вот, кстати, код, который работает? И почему же из-за этого такая разница конкретная?
Код

procedure TForm1.Button1Click(Sender: TObject);
var d1,d2:TDate;
    kol:integer;
begin
  kol:=0;
  d1:=StrToDate('03.01.1985');
  d2:=StrToDate('05.01.1985');
  if d2>d1 then
    kol:=kol+1;
  ShowMessage(IntToStr(kol));
end;
Здесь нормально kol превращается в 1. Странное поведение.


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
ama_kid
Дата 14.5.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



просто у тебя в первом случае значения, присвоенные kol - нигде не используется и компилятор их отбрасывает... Отключи оптимизацию в свойствах проекта - все будет выполняться...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
MacTep
Дата 14.5.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Где именно она отключается? smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
skyboy
Дата 14.5.2007, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

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



Цитата(MacTep @  14.5.2007,  12:33 Найти цитируемый пост)
kol 

эта переменная глобальная? тогда зачем ты её объявляешь в секции var? если эта переменная и должна быть локальной, то почему в твоем коде это значение не выходит за пределы процедуры? может, ты просто не так проверяешь, когда говоришь, что "она не изменилась"?
PM MAIL   Вверх
Snowy
Дата 14.5.2007, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Не надо ничего отключать.
Просто компилятор - умное существо.
Зачем считать kol, если ты его всё равно никогда не используешь...

Добавлено через 1 минуту и 10 секунд
MacTep, ты скажи что ты хочешь сделать.
А то мы обсуждаем что неправильно, а не как сделать правильно.
Ибо неизвестно, чего тебе надо...
PM MAIL   Вверх
drkot
Дата 14.5.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


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

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



Уважаемый MacTep, ответте на вопрос: в каком формате у Вас дата dd.mm.yyyy или mm.dd.yyyy?
и я думаю что ваша проблемма решится.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
MacTep
Дата 16.5.2007, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



drkot, в формате dd.mm.yyyy. smile

Snowy, я просто его в этом примере не использую. Как только задействовал, сразу проблема и пропала. smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
aktuba
Дата 17.5.2007, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Смышленный
***


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

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



MacTep, а чем тебе CompareDate не устраивала???


--------------------
user posted image
PM MAIL WWW Skype   Вверх
MacTep
Дата 19.5.2007, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



Да тем и не устраивала, что я просто этой функцией в жизни не пользовался. smile;)


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
WinSer
Дата 17.6.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня есть вопрос. Что я делаю нетак?
Прога должна открыть типизированый файл, взять из определенного столбца дату, сравнить с заданым периодом времени и если выполняется условие записать в новый файл.
Она работает, только:
 1. Не перекидает записи при  условии с сегодня по сегодня.
 2. Если задавать диапазон например с 12:05:2007 по 16:05:2007 то перекидываются все кроме тех, которые 16 числа
 3. Если задавать фильтрацию по дате и по времени одновременно, то вообще ничего неотбирает, хотя записи есть.

Код:
Код

procedure TForm8.BitBtn1Click(Sender: TObject);
begin

 AssignFile(f,ARM.katalog + '\Podii.dat');
 Reset(f);
 AssignFile(f1,ARM.katalog + '\Podii1.dat');
 Rewrite(f1);
 n:=FileSize(f);
 i:=0;
 if Form8.CheckBox1.Checked=False then
  Begin
   data1:=Form8.DateTimePicker1.Date;
   data2:=Form8.DateTimePicker2.Date;
   While i<n do
    Begin
     Read(f,zm1);
     i:=i+1;
     if ((zm1.dat>=data1) and (zm1.dat<=data2)) then
      Begin
       zm1.zapus:=FilePos(f);
       Write(f1,zm1);
      end;
    end;
  end
 else
  Begin
   Data1:=Form8.DateTimePicker1.Date;
   Data2:=Form8.DateTimePicker2.Date;
   Chass1:=Form8.DateTimePicker3.Time;
   Chass2:=Form8.DateTimePicker4.Time;
   While i<n do
    Begin
     Read(f,zm1);
     i:=i+1;
     if ((zm1.chas>=chass1) and (zm1.chas<=chass2)) and ((zm1.dat>=data1) and (zm1.dat<=data2)) then
      Begin
       zm1.zapus:=FilePos(f);
       Write(f1,zm1);
      end;
    end;
  end;
 zf:=True;
 CloseFile(f1);
 CloseFile(f);
Form5.Visible:=True;
Form8.Visible:=False;
end;



PM MAIL   Вверх
MacTep
Дата 23.6.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

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



WinSer, а может вообще весь проект кинешь. Надо на твои файлы посмотреть бы...


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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