|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"期間を求める"
1:開始日終了日を指定してその期間の「日数+時間」を取得します。
2:開始日終了日を指定してその期間の「時間」を取得します。
{------コード開始-------}
const
CDay :TDateTime = 1;
CHour:TDateTime = 1 / 24 ;
CMin :TDateTime = 1 / (24 * 60);
CSec :TDateTime = 1 / (24 * 3600);
{
指定された期間の日数+時間を取得する
AFrom:期間開始日
ATo :期間終了日
DD :取得した期間日数
HH :取得した期間時間
MM :取得した期間分
SS :取得した期間秒
}
procedure GetFromToDateTime
(AFrom,ATo:TDateTime;var DD,HH,MM,SS:Longint);
var
FTime:TDateTime;
TempTime:Extended;
begin
DD := 0;
HH := 0;
MM := 0;
SS := 0;
if (AFrom < 0) or (ATo < 0) or (AFrom > ATo) then Exit;
FTime := ATo - AFrom;
TempTime := FTime;
DD := Trunc(TempTime);
TempTime := (FTime - (DD * CDay)) / CHour;
HH := Trunc(TempTime);
TempTime := (FTime - ((DD * CDay) + (HH * CHour))) / CMin;
MM := Trunc(TempTime);
TempTime := (FTime - ((DD * CDay) + (HH * CHour) + (MM * CMin))) /
CSec;
SS := Round(TempTime);//誤差丸め
if SS >= 60 then begin
SS := SS-60;
MM := MM+1;
end;
end;
{
指定された期間の時間を取得する
AFrom:期間開始日
ATo :期間終了日
HH :取得した期間時間
MM :取得した期間分
SS :取得した期間秒
}
procedure GetFromToTime(AFrom,ATo:TDateTime;var HH,MM,SS:Longint);
var
FTime:TDateTime;
TempTime:Extended;
DD:Longint;
begin
HH := 0;
MM := 0;
SS := 0;
if (AFrom < 0) or (ATo < 0) or (AFrom > ATo) then Exit;
FTime := ATo - AFrom;
TempTime := FTime;
DD := Trunc(TempTime);
TempTime := (FTime - (DD * CDay)) / CHour;
HH := Trunc(TempTime);
TempTime := (FTime - ((DD * CDay) + (HH * CHour))) / CMin;
MM := Trunc(TempTime);
TempTime :=
(FTime - ((DD * CDay) + (HH * CHour) + (MM * CMin))) / CSec;
SS := Round(TempTime);//誤差丸め
if SS >= 60 then begin
SS := SS-60;
MM := MM+1;
end;
HH := HH + DD*24;
end;
{------コード終わり-------}
使い方例
FormにTEditを二つ、TLabelを二つ、TButtonを一つ置きます。
{------サンプルコード開始-------}
procedure TForm1.FormCreate(Sender: TObject);
begin
FNow := Now;
Label1.Caption := '';
Label2.Caption := '';
Edit1.Text :=
FormatDateTime('yyyy/mm/dd hh:mm:ss',
StrToDateTime('1977/9/08 00:00:00'));
//適当な日付を指定してます(^^;)
Edit2.Text :=
FormatDateTime('yyyy/mm/dd hh:mm:ss',Now);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
DD,HH,MM,SS:Longint;
TempDate1,TempDate2:TDateTime;
begin
Label1.Caption := '';
Label2.Caption := '';
//日付時間が入力されていなければ何もしない
if (Edit1.Text = '') or (Edit2.Text = '') then Exit;
//文字列を日付時間型に変換
try
TempDate1 := StrToDateTime(Edit1.Text); //From(Small)
except
try
TempDate1 := StrToTime(Edit1.Text); //From(Small)
except
ShowMessage('日付時間を入力してください');
end;
end;
try
TempDate2 := StrToDateTime(Edit2.Text); //To (Large)
except
try
TempDate2 := StrToTime(Edit2.Text); //To (Large)
except
ShowMessage('日付時間を入力してください');
end;
end;
//日付時間の大小関係を確認
if TempDate1 <= TempDate2 then
begin
//期間の日数+時間を取得して表示
GetFromToDateTime(TempDate1,TempDate2,DD,HH,MM,SS);
Label1.Caption :=
Format('期間は%d日%d時間%d分%d秒です',[DD,HH,MM,SS]);
//期間の時間を取得して表示
GetFromToTime(TempDate1,TempDate2,HH,MM,SS);
Label2.Caption := Format('時間は%d時間%d分%d秒です',[HH,MM,SS]);
end;
end;
{------サンプルコード終了-------}
98/09/05(土) 15:51 十兵衛(BZT01311)
Original document by 十兵衛 氏 ID:(BZT01311)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|