Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как по дате определить знак зодиака? [D7, WinXP]


rolex2002 ©   (2007-08-06 10:54:00) 

Например Овен (21.03 - 20.04), в DataTimePicker забивается дата рождения. Как определить?


stanislav   (2007-08-08 15:07:00) [1]

rolex2002   (06.08.07 12:50) [15]
Ни фига себе, ты так собираешься определять все года?
Тут надо не так, всего 12 строк такого вида:
if ((YearOf(Date)-2007) mod 12)=0 then a:='Свинья'
и так 12 раз только меняешь год и надпись за then


Сергей М.   (2007-08-08 14:31:00) [2]


> о эфемеридам.


Эт еще куда ?)


Котик Б   (2007-08-08 14:29:00) [3]

Фигня это, а не определение знака - правильно определять нужно по эфемеридам...


TStas   (2007-08-06 21:33:00) [4]

А зачем это делать? Вы в астрологию искренне верите?


Jeer   (2007-08-06 16:09:00) [5]

function GetSign(dt: TDateTime): string;
const
 arSign: array[0..11] of string = ('Kozerog', 'Vodoley',..);
var m: integer;
begin
 m := MonthOf(dt);
 if DayOf(dt) > GetSplitDay(m) then Inc(m);
 if (m > 12) then m := 1;
 Result := arSign[m];
end;

// get split day
function GetSplitDay(m: integer): integer;
const
 arC: array[0..11] of integer = (0, -1, 1, 0, 1, 0, 2, 0, 0, 0, -1, -1);
var
 i: integer;
begin
 Result := 20;
 for i := 0 to m - 1 do
   Result := Result + arC[i];
end;

//
ShowMessage(GetSign(Now));


rolex2002   (2007-08-06 12:50:00) [6]

function ID(const DT: TDateTime): string;
begin
if DT>=StrToDate('10.02.1910') then result:='Собака';
if DT>=StrToDate('30.01.1911') then result:='Кабан';
...
end;

Так?


{RASkov}   (2007-08-06 12:38:00) [7]

> [11] rolex2002   (06.08.07 12:33)
> if FormatDateTime('dd.mm.yyyy',DT)>='10.02.1910' then beep;

Зачем дату переводить в строку для сравнения??? Лучше наоборот - строку в дату и сравнивать...


{RASkov}   (2007-08-06 12:36:00) [8]

> [11] rolex2002   (06.08.07 12:33)
> Ещё вопрос, как правильно сравнить две даты?

Дата - это число, а как числа сравнивать знаешь?


{RASkov}   (2007-08-06 12:34:00) [9]

> [11] rolex2002   (06.08.07 12:33)

См [8]


rolex2002   (2007-08-06 12:33:00) [10]

Да я заметил. Потом забил :)

Ещё вопрос, как правильно сравнить две даты? Потому что я помню там есть какие-то подводные камни.
Например,
var DT:TDateTime;
if FormatDateTime('dd.mm.yyyy',DT)>='10.02.1910' then beep;


{RASkov}   (2007-08-06 12:25:00) [11]

> [9] rolex2002   (06.08.07 12:20)
> var year, Mounth,day:word;

Мою ошибку хотя бы исправь :)


rolex2002   (2007-08-06 12:20:00) [12]

всем спасибо всё работает.
Сделал так:
function zodiac(const DT: TDateTime): string;
var year,Mounth,day:word;
begin
DecodeDate(DT,year,mounth,day);
case Mounth of
1: case Day of
 1..20: Result:='Козерог';
 21..31: Result:= 'Водолей';
 end;
2: case day of
 1..19: Result:='Водолей';
 20..29: Result:='Рыбы';
 end;
3: case day of
 1..20: Result:='Рыбы';
 21..31: Result:='Овен';
 end;
4: case day of
 1..20: Result:='Овен';
 21..31: Result:='Телец';
 end;
5: case day of
 1..21: Result:='Телец';
 22..31: Result:='Близнецы';
 end;
6: case day of
 1..21: Result:='Близнецы';
 22..31: Result:='Рак';
 end;
7: case day of
 1..23: Result:='Рак';
 24..31: Result:='Лев';
 end;
8: case day of
 1..23: Result:='Лев';
 24..31: Result:='Дева';
 end;
9: case day of
 1..23: Result:='Дева';
 24..31: Result:='Весы';
 end;
10: case day of
 1..23: Result:='Весы';
 24..31: Result:='Скорпион';
 end;
11: case day of
 1..22: Result:='Скорпион';
 23..31: Result:='Стрелец';
 end;
12: case day of
 1..21: Result:='Стрелец';
 22..31: Result:='Козерог';
 end;
end;
End;


stanislav   (2007-08-06 11:48:00) [13]

rolex2002   (06.08.07 11:44) [5]
см. модуль dateutils


{RASkov}   (2007-08-06 11:46:00) [14]

Т.е.
procedure DecodeDate(const DateTime: TDateTime; var Year, Month, Day: Word);


{RASkov}   (2007-08-06 11:45:00) [15]

> [5] rolex2002   (06.08.07 11:44)

DecodeXxx


rolex2002   (2007-08-06 11:44:00) [16]

А как тогда вытащить из формата TDateTime: Month и Day ?


{RASkov}   (2007-08-06 11:35:00) [17]

case Mounth of
1: case Day of
  1..20: Result:='Козерог';
  21..31: Result:= 'Водолей';
2: case day of
  1..20: Result:='Водолей';
  21..29: Result:='Рыбы';
и т.д....


rolex2002   (2007-08-06 11:24:00) [18]

Хотя бы как сравнить...


rolex2002   (2007-08-06 11:22:00) [19]

Мля... можно примерчик?


stanislav   (2007-08-06 11:12:00) [20]

нужна база соответствия.
Делаешь тип Record у которого 3 поле 1 строковое наименование, 2 и 3 дата
2 - "с" 3 - "по".
И потом массив от 1 до 12, наплняешь значениями и сохраняешь в файл, потом из него читаешь.
Можно использовать БД. Короче вариантов много.


Наверх

Титульная страница Поиск, карта сайта Написать письмо