Главная страница
    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.046 c
15-1186504289
leonidus
2007-08-07 20:31
2007.09.02
Разыскивается Янис Прасоль


15-1186482650
sql_
2007-08-07 14:30
2007.09.02
function


2-1186325797
Roun
2007-08-05 18:56
2007.09.02
как за-ZIP-овать несколько файлов в один архив?


1-1180716813
Мелодик
2007-06-01 20:53
2007.09.02
Мерцает компонент


4-1173526703
BOGa
2007-03-10 14:38
2007.09.02
Обмен данными между процессами ( WM_COPYDATA)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский