if ((nepact = 25) and (ngold > 11)) or (nepact = 24) then nEpact := nEpact + 1;
{ Ищем полную луну: }
nMoon := 44 – nEpact;
if nmoon < 21 then nMoon := nMoon + 30;
{ Позиционируем на воскресенье: }
nMoon := nMoon + 7 – ((nSunday + nMoon) mod 7);
if nmoon >l 31 then
begin
nMonth := 4;
nDay := nMoon – 31;
end
else
begin
nMonth := 3;
nDay := nMoon;
end;
Easter := EncodeDate(Year, nMonth, nDay);
end; {easter}
Преобразование даты в количество секунд
Delphi 1
EncodeDate возвращает объект TDateTime, который просто является double-числом. Для получения количества миллисекунд с даты 1/1/0001, умножьте результат на 86400000.0 Но чтобы избежать переполнения, лучше пользоваться более поздней датой.
Преобразование даты в неделю
Delphi 1
procedure TForm1.Button1Click(Sender: TObject);
var frstDay,toDay : TDateTime; week : Integer;
begin
frstDay := StrToDate('1/1/96');
toDay := StrToDate(Edit1.Text);
week := Trunc((toDay - frstDay) / 7) + 1;
Label1.Caption := IntToStr(week);
end;
Преобразование
даты
Delphi 1
procedure TForm1.Button1Click(Sender: TObject);
var
st,formatsave : string;
DT : TDateTime;
begin
st := Edit1.text; // '1996-06-03 00.00.00'
formatsave := ShortDateFormat;
ShortDateFormat := 'yyyy.mm.dd hh.mm.ss';
while pos ('-', st) > 0 do st [pos ('-', st)] := '.';
Данный код преобразует дату, переданную в формате, определенном в виде короткой даты в Панели Управления (типа DD/MM/YY) в формат, заданный в строке Format (в нашем примере DDMMYYYY).
Если DD/MM/YY — входное поле, а DDMMYYYY — поле базы данных, то приведенный выше код может сослужить пользователю хорошую службу, если он вдруг захочет использовать другой формат даты, с его соответствующим переопределением в Панели Управления.
(Естественно, YYYYMMDD для поля базы данных при обычных обстоятельствах будет лучше чем DDMMYYYY, поскольку в настоящее время используется метод последовательной сортировки).
Приведение даты
Delphi 1
procedure TForm1.MaskEdit1Exit(Sender: TObject);
var
y, m, d : word;
begin
decodedate(strtodate(maskedit1.text) + 11, y, m, d);
У меня есть программа, которая делает примерно то, что вы хотите. Она сообщает для даты текущую неделю и день недели. Вам необходимо лишь реализовать вычисление предела для дат недели. Кроме того, формат в этом коде для дат задан в виде "06/25/1996".
Вы должны создать форму с именем "Forma", компонентом TEdit с именем "Edit1", четырьмя метками и кнопкой с именем "GetWeekBtn". Убедитесь в том, что обработчиком события формы OnCreate является метод FormCreate.