Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

begin

 { Номер Золотого Года в 19-летнем Metonic-цикле: }

 nGold := (Year mod 19) + 1;

 { Вычисляем столетие: }

 nCent := (Year div 100) + 1;

 { Количество лет, в течение которых отслеживаются високосные года… }

 { для синхронизации с движением солнца: }

 nCorx := (3 * nCent) div 4 – 12;

 {
Специальная коррекция для синхронизации Пасхи с орбитой луны: }

 nCorz := (8 * nCent + 5) div 25 – 5;

 { Находим воскресенье: }

 nSunday := (Longint(5) * Year) div 4 – ncorx – 10;

 { ^ Предохраняем переполнение года за отметку 6554}

 { Устанавливаем Epact – определяем момент полной луны: }

 nEpact := (11 * nGold + 20 + nCorz – nCorx) mod 30;

 if nepact < 0 then nEpact := nEpact + 30;

 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 &gtl 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)] := '.';

 DT := StrToDateTime(st);

 ShortDateFormat := formatsave;

 Label1.Caption := DateTimeToStr(DT);

end;

Преобразование даты — добавление столетия

Delphi 1

LongDate := FormatDateTime('ddmmyyyy', StrToDate(ShortDate));

Данный код преобразует дату, переданную в формате, определенном в виде короткой даты в Панели Управления (типа 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);

 maskedit2.text := inttostr(m) + '/' + inttostr(d) + '/' + inttostr(y);

end;

Даты и недели

Delphi 1

У меня есть программа, которая делает примерно то, что вы хотите. Она сообщает для даты текущую неделю и день недели. Вам необходимо лишь реализовать вычисление предела для дат недели. Кроме того, формат в этом коде для дат задан в виде "06/25/1996".

Вы должны создать форму с именем "Forma", компонентом TEdit с именем "Edit1", четырьмя метками и кнопкой с именем "GetWeekBtn". Убедитесь в том, что обработчиком события формы OnCreate является метод FormCreate.

Поделиться с друзьями: