Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.02.2011, 17:28   #1
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию Как перевести integer в Date

Как перевести integer в Date?
Есть такой код
Цитата:
var
i,l:integer;
A : boolean;
begin
A := False;
for i:= 0 to StringGrid1.RowCount - 1 do
for l:=0 to StringGrid1.ColCount - 1 do
begin
if StrToDate(StringGrid1.Cells[4, i]) <= StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) <= StrToDate(StringGrid1.Cells[8, i]) then
A := True;
if StrToDate(StringGrid1.Cells[4, i]) <= StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) >= StrToDate(StringGrid1.Cells[8, i]) then
A := True;
if StrToDate(StringGrid1.Cells[4, i]) > StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) < StrToDate(StringGrid1.Cells[8, i]) then
A := True;
if A = True then
begin
Form3.StringGrid1.Cells[l,i]:=Form2.StringGrid1.Cells[l,i];
Form3.StringGrid1.RowCount:=i;
end;
A := False;
end;
Form3.ShowModal;
end;
Естественно он не работает. Так как переменная i объявлена как integer. Вот мне и нужно использовать не StrToDate , а что то другое. Что?
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 17.02.2011, 17:35   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. Причем тут i: Integer к Date или StrToDate?
2. Вы используете StrToDate верно как я гляну. Если выдает ошибку, то видимо ошибку форматирования, а то что у вас там в сетке мы врятли можем видеть.

В итоге, читайте внимательно как верно форматировать текст чтобы он воспринимался функцией StrToDate, и согласно формату заполняйте ячейки в вашем StringGrid1
BOBAH13 вне форума Ответить с цитированием
Старый 17.02.2011, 17:38   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

см. EncodeDate
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.02.2011, 17:56   #4
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

как вариант:
http://programmersforum.ru/showpost....20&postcount=6
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 17.02.2011, 18:39   #5
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
if StrToDate(StringGrid1.Cells[4, i]) <= StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) <= StrToDate(StringGrid1.Cells[8, i]) then
A := True;
if StrToDate(StringGrid1.Cells[4, i]) <= StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) >= StrToDate(StringGrid1.Cells[8, i]) then
A := True;
if StrToDate(StringGrid1.Cells[4, i]) > StrToDate(StringGrid1.Cells[7, i]) and
StrToDate(StringGrid1.Cells[5, i]) < StrToDate(StringGrid1.Cells[8, i]) then
A := True;
а зачем повторять оно и тоже 3 раза?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 17.02.2011, 18:48   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от ArtGrek Посмотреть сообщение
а зачем повторять оно и тоже 3 раза?
Для надёжности. Второй и третий - контрольный. А то вдруг ЧО

P.S.
Для особой НАДЁЖНОСТИ лучше ещё так писать:

Код:
if StrToDate(StringGrid1.Cells[4, i]) <= StrToDate(StringGrid1.Cells[7, i]) then
 A := True
else
if StrToDate(StringGrid1.Cells[4, i]) > StrToDate(StringGrid1.Cells[7, i]) then
 A := False
else
 A := True and False;
А то ВДРУГ ЧО!
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 17.02.2011, 18:57   #7
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
A := True and False;
хорош
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b:  TDate;
begin
  a := StrToDate('01.01.2001');
  b := StrToDate('02.02.2002');
  if a > b then ShowMessage(DateToStr(a));
  if a < b then ShowMessage(DateToStr(b));
end;
вот тебе пример сравнения даты
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 17.02.2011, 19:38   #8
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Если кому не трудно - гляньте прикрепление.
Суть того что я хочу сделать:
Есть два списка. В первом люди работающие на одной организации, во втором - работающие на других (разных организациях).
Нужно:
1. Выбрать людей которые есть и в первом и втором списке
2. Сравнить период работы в одной организации и в другой. Если человек одновременно работал в двух организациях - вывести в отдельную таблицу.

Не получается у меня сравнить по дате! пишет
[Error] Unit2.pas(41): Operator not applicable to this operand type
[Error] Unit2.pas(41): Incompatible types
[Error] Unit2.pas(44): Operator not applicable to this operand type
[Error] Unit2.pas(44): Incompatible types
[Error] Unit2.pas(47): Operator not applicable to this operand type
[Error] Unit2.pas(47): Incompatible types

41 строка - это
Цитата:
StrToDate(StringGrid1.Cells[5, i]) <= StrToDate(StringGrid1.Cells[8, i]) then
44 строка -
Цитата:
StrToDate(StringGrid1.Cells[5, i]) >= StrToDate(StringGrid1.Cells[8, i]) then
47 -
Цитата:
StrToDate(StringGrid1.Cells[5, i]) < StrToDate(StringGrid1.Cells[8, i]) then
Вложения
Тип файла: rar Sravnilka.rar (218.3 Кб, 9 просмотров)
Смотреть фильмы HD Фильмы для планшетов
demiancz вне форума Ответить с цитированием
Старый 17.02.2011, 19:46   #9
demiancz
Форумчанин
 
Регистрация: 28.09.2010
Сообщений: 246
По умолчанию

Блин. Плдохо быть тормозом. Только написал сообщение и сразу сам увидел ошибку. Со скобками вся фишка!

Но теперь выдает ошибку "is not a valid date.
Смотреть фильмы HD Фильмы для планшетов

Последний раз редактировалось demiancz; 17.02.2011 в 19:51.
demiancz вне форума Ответить с цитированием
Старый 17.02.2011, 22:49   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

кому не лень, проверьте подходит ли условие выделеное красным, для проверки пересечения диапозонов дат
d1<->d2 d3<->d4
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  i,l:integer;
  A : boolean;
  d1,d2,d3,d4: TDate;
  ro: integer;
begin
  A := False;
  ro := 0;
  for i:= 1 to StringGrid1.RowCount - 1 do
  begin
    if ((StringGrid1.Cells[4,i] <> '') or (StringGrid1.Cells[5,i] <> '')) and 
      ((StringGrid1.Cells[7,i] <> '') or (StringGrid1.Cells[8,i] <> '')) then
    begin
      if StringGrid1.Cells[4,i] <> '' then d1 := StrToDate(StringGrid1.Cells[4,i])
        else d1 := StrToDate(StringGrid1.Cells[5,i]);
      if StringGrid1.Cells[5,i] <> '' then d2 := StrToDate(StringGrid1.Cells[5,i])
        else d2 := StrToDate(StringGrid1.Cells[4,i]);
      if StringGrid1.Cells[7,i] <> '' then d3 := StrToDate(StringGrid1.Cells[7,i])
        else d3 := StrToDate(StringGrid1.Cells[8,i]);
      if StringGrid1.Cells[8,i] <> '' then d4 := StrToDate(StringGrid1.Cells[8,i])
        else d4 := StrToDate(StringGrid1.Cells[7,i]);
      if ( (d1 <= d3) and (d3 <= d2) ) or ((d1 <= d4) and (d4 <= d2)) or
        ( (d3 <= d1) and (d1 <= d4) ) or ((d3 <= d2) and (d2 <= d4)) then A := True;
    end;
    if A = True then
    begin
      inc(ro);
      Form3.StringGrid1.RowCount := ro;
      for l := 0 to 5 do
        Form3.StringGrid1.Cells[l,ro - 1]:=Form2.StringGrid1.Cells[l,i];
    end;
    A := False;
  end;
  Form3.ShowModal;
end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FireBird. Как конвертировать Integer в Date и обратно? BeJIuKuu_Hexo4yxa SQL, базы данных 5 25.10.2010 10:10
как переменную типа TFont перевести в тип integer? делфи_6 Общие вопросы Delphi 8 26.05.2010 06:02
Перевести сhar в integer Ckomoroh Общие вопросы Delphi 10 12.12.2009 17:25
перевести число, находящееся в string, в integer? andrey4623 Паскаль, Turbo Pascal, PascalABC.NET 4 23.06.2007 00:32
как перевести из integer в real(и обратно), и из real в string(и обратно) Ga-sergey Общие вопросы Delphi 2 08.06.2007 21:13