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

Шрифт
Интервал

Если 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.

Надеюсь, что помог вам.

>unit Forma;


>interface


>uses

> SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Forms, Dialogs, StdCtrls;


>type

> TForma1 = class(TForm)

>  Edit1: TEdit;

>  Label1: TLabel;

>  Label2: TLabel;

>  Label3: TLabel;

>  GetWeekBtn: TButton;

>  Label4: TLabel;

procedure GetWeekBtnClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

private { Private declarations }

Function HowManyDays(pYear,pMonth,pDay:word):integer;

public { Public declarations }

> end;


>var

> Forma1: TForma1;


>implementation


> {$R *.DFM}

>Uses Inifiles;


>procedure TForma1.FormCreate(Sender: TObject);

> var WinIni:TInifile;

>begin

> WinIni:=TIniFile.Create('WIN.INI');

> WinIni.WriteString('intl','sShortDate','MM/dd/yyyy');

> WinIni.Free;

>end;


>Function TForma1.HowManyDays(pYear,pMonth,pDay:word):integer;

> var Sum:integer;

> pYearAux:word;

>begin

> Sum:=0;

if pMonth>1  then Sum:=Sum+31;

if pMonth>2  then Sum:=Sum+28;

if pMonth>3  then Sum:=Sum+31;

if pMonth>4  then Sum:=Sum+30;

if pMonth>5  then Sum:=Sum+31;

if pMonth>6  then Sum:=Sum+30;

if pMonth>7  then Sum:=Sum+31;

if pMonth>8  then Sum:=Sum+31;

if pMonth>9  then Sum:=Sum+30;

if pMonth>10 then Sum:=Sum+31;

if pMonth>11 then Sum:=Sum+30;

> Sum:=Sum + pDay;

if ((pYear - (pYear div 4)*4)=3D0) and (pMonth>2) then inc(Sum);

> HowManyDays:=Sum;

>end;   { HowManyDays }


>procedure TForma1.GetWeekBtnClick(Sender: TObject);

>var

> ADate: TDateTime;EditAux:String;

> Week,year,month,day:Word;

>begin

> EditAux:=Edit1.Text;

> ADate := StrToDate(EditAux);

> Label1.Caption := DateToStr(ADate);

> DecodeDate(Adate,Year,Month,Day);

> Case DayOfWeek(ADate) of

>1: Label4.Caption:='Воскресенье';

> 2: Label4.Caption:='Понедельник';

> 3: Label4.Caption:='Вторник';

> 4: Label4.Caption:='Среда';

> 5: Label4.Caption:='Четверг';

> 6: Label4.Caption:='Пятница';

> 7: Label4.Caption:='Суббота';

end

>Week:=(HowManyDays(year,month,day) div 7) +1;

> Label3.Caption:='Неделя No. '+IntToStr(Week);

>end;


>end.

Количество дней между двумя датами I

Delphi 1

ПЕРЕМЕННЫЕ:

>Year1, Month1, Day1,

>Year2, Month2, Day2,

>YearResult, MonthResult, DayResult: Word;

>TDay1, TDay2, DateDiff: TDateTime;

КОД:

>TDay1 := EncodeDate(Year1, Month1, Day1);

>TDay2 := EncodeDate(Year2, Month2, Day2);

>DateDiff := TDay2 – TDay1; {предположим, что TDay2 позднее, чем TDay1}

>DecodeDate(DateDiff, YearResult, MonthResult, DayResult);

DateDiff имеет тип LongInt (хотя и является объектом TDateTime), и содержит количество дней между датами.

Количество дней между двумя датами II

Delphi 1

Для DateDiff:

Вы смотрели на функцию DecodeDate? Это не точно именно то, что вам нужно, но на ее основе можно сделать вашу функцию именно с нужной вам функциональностью.

Для величины Present:

>function PresentValue(const cashflows : array of double;    { отсортированные транзакции, начальный индекс - cashflows[0] }

> n : integer; { количество транзакций в массиве }

> rate : double; { оценочный процент за истекший период }

> atbegin : boolean) : double; { true, если транзакция была в начале периода,false если в конце }

>var

> i: integer;

> factor: double;

>begin

> factor := (1 + rate / 100.0);

> result := 0;

for i := n - 1 downto 0 do result := (result + cashflows[n]) / factor;

if atbegin then result := result * factor;

>end;

Конвертирование даты

Delphi 1

>TheDateField.AsString := TheDateString;

>TheDateString := TheDateField.AsString;

это делает преобразование подобно DateToStr и StrToDate. Аналогично:

>TheDateField.AsDateTime := StrToDate(TheDateString);

>TheDateString := DateToStr(TheDateField.AsDateTime);

Число текущей недели

Delphi 1

Здесь включены 2 вспомогательные функции, необходимые для работы вашей функции. Одна проверяет високосный год, другая возвращает число дней месяца (с проверкой високосного года), третья, ту, что вы хотели, возвращает текущую неделю года.

>{***************************************************************************}

>function kcIsLeapYear(nYear: Integer): Boolean;

>begin

> Result := (nYear mod 4 = 0) and ((nYear mod 100 <> 0) or (nYear mod400 = 0));

>end;


>{***************************************************************************}


Еще от автора Валентин Озеров
Советы по Delphi. Версия 1.0.6

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Рекомендуем почитать
Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Программирование на Visual C++. Архив рассылки

РАССЫЛКА ЯВЛЯЕТСЯ ЧАСТЬЮ ПРОЕКТА RSDN, НА САЙТЕ КОТОРОГО ВСЕГДА МОЖНО НАЙТИ ВСЮ НЕОБХОДИМУЮ РАЗРАБОТЧИКУ ИНФОРМАЦИЮ, СТАТЬИ, ФОРУМЫ, РЕСУРСЫ, ПОЛНЫЙ АРХИВ ПРЕДЫДУЩИХ ВЫПУСКОВ РАССЫЛКИ И МНОГОЕ ДРУГОЕ.


Введение в Direct3D8

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Пишем драйвер Windows на ассемблере

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.