Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.043 c
3-1178788650
mefodiy
2007-05-10 13:17
2007.09.02
SQL запрос через ADOQuery


3-1178529064
bss
2007-05-07 13:11
2007.09.02
Как присвоить blob-полю значение NULL?


10-1136671723
Gear
2006-01-08 01:08
2007.09.02
функция в COM возвращает HRESULT, а дельфи создаёт procedure


15-1186368312
Slider007
2007-08-06 06:45
2007.09.02
С днем рождения ! 6 августа 2007 понедельник


2-1186688759
vicegen
2007-08-09 23:45
2007.09.02
Про файл-мэппинг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский