お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





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