|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"msec単位の正確な時間計算"
//msec単位の時間の計算を正確に行う。
//但し変換、分解のときは負にならないようにする)
//フォームにボタンを一つ置いてOnClickイベントハンドラに記述
//もちろん関数だけ抜き出しても使えます。(^^ゞ
procedure TForm1.Button1Click(Sender: TObject);
//時間、分、秒、1/1000秒をTimeStamp型に変換
function EncodeTimeStamp(Hour, Min, Sec, MSec: Word): TTimeStamp;
begin
if (Hour < 24) and (Min < 60)
and (Sec < 60) and (MSec < 1000) then
begin
Result := MSecsToTimeStamp(Hour * 3600000
+ Min * 60000 + Sec * 1000 + MSec);
end
else
begin
raise EConvertError.Create('変換できません');
end;
end;
//TimeStamp型を時間、分、秒、1/1000秒に分解
procedure DecodeTimeStamp(TimeStamp: TTimeStamp; var Hour,
Min, Sec, MSec: Word);
var
TmpHour, TmpMin, TmpSec: Cardinal;
begin
Hour := TimeStamp.Time div 3600000;
TmpHour := Hour * 3600000;
Min := (TimeStamp.Time - TmpHour) div 60000;
TmpMin := Min * 60000;
Sec := (TimeStamp.Time - TmpHour - TmpMin) div 1000;
TmpSec := Sec * 1000;
MSec := TimeStamp.Time - TmpHour - TmpMin - TmpSec;
end;
var
Time1, Time2, Time3: TTimeStamp;
Hour, Min, Sec, MSec: Word;
begin
Time1 := EncodeTimeStamp(0, 7, 8, 999); //変換
Time2 := EncodeTimeStamp(0, 4, 5, 666); //変換
Time3.Time := Time1.Time - Time2.Time; //計算
DecodeTimeStamp(Time3, Hour, Min, Sec, MSec); //分解
//^^↑^ここに入れる値は正の値じゃないとだめです。
Caption := IntToStr(Hour)+':'+IntToStr(Min)+':'
+IntToStr(Sec)+':'+IntToStr(MSec);
end;
-------
97/10/19 (日)14:34:50
FuKu (SGV00305)
Original document by FuKu 氏 ID:(SGV00305)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|