Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.02;
Скачать: CL | DM;

Вниз

Как по дате определить знак зодиака?   Найти похожие ветки 

 
rolex2002   (2007-08-06 10:54) [0]

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


 
stanislav ©   (2007-08-06 11:12) [1]

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


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

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


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

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


 
{RASkov} ©   (2007-08-06 11:35) [4]

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:44) [5]

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


 
{RASkov} ©   (2007-08-06 11:45) [6]

> [5] rolex2002   (06.08.07 11:44)

DecodeXxx


 
{RASkov} ©   (2007-08-06 11:46) [7]

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


 
stanislav ©   (2007-08-06 11:48) [8]

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


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

всем спасибо всё работает.
Сделал так:
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;


 
{RASkov} ©   (2007-08-06 12:25) [10]

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

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


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

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

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


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

> [11] rolex2002   (06.08.07 12:33)

См [8]


 
{RASkov} ©   (2007-08-06 12:36) [13]

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

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


 
{RASkov} ©   (2007-08-06 12:38) [14]

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

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


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

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

Так?


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

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));


 
TStas ©   (2007-08-06 21:33) [17]

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


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

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


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


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


Эт еще куда ?)


 
stanislav ©   (2007-08-08 15:07) [20]

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



Страницы: 1 вся ветка

Текущий архив: 2007.09.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.027 c
2-1186828495
Снова я
2007-08-11 14:34
2007.09.02
Сокеты и слияние команд


8-1150877108
fun.exe
2006-06-21 12:05
2007.09.02
Скопировать кусок Bitmap


2-1186687426
Knob
2007-08-09 23:23
2007.09.02
Таблица символов


11-1168893404
Trible
2007-01-15 23:36
2007.09.02
Про strlist


11-1168775119
Psychedelic
2007-01-14 14:45
2007.09.02
Как отличать друг от друга компоненты