お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
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