![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как по дате определить знак зодиака? [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, наплняешь значениями и сохраняешь в файл, потом из него читаешь.
Можно использовать БД. Короче вариантов много.