[Delphi]DaysBetween・HoursBetween日付や時刻の間隔を知る






トップページへ

※全てのDelphi(楽天市場で探すamazonで探す)で動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます

サンプル ※説明に必要な部分しか記述していません。


●ヘルプからの引用です

function DaysBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;

指定された 2 つの TDateTime 値の間にある完全な日(24 時間)の数を返します。

DaysBetween 関数を呼び出すと,2 つの TDateTime 値の差(日数)を取得できます。

 

function HoursBetween(const ANow: TDateTime; const AThen: TDateTime): Int64;

2 つの指定された TDateTime 値の間にある時間数を返します。

HoursBetween 関数を呼び出すと,2 つの TDateTime 値の差(時間数)を取得できます。


 

DaysBetweenやHoursBetweenなどのサンプル文を掲載しました。

 

なお HourSpan だけは挙動が異なります。ヘルプによれば

HourSpan 関数を呼び出すと,2 つの TDateTime 値の差(時間数)を取得できます。完全な時間(60 分)だけを数に入れる HoursBetween 関数とは違って,HourSpan は不完全な時間を端数として報告します。

とのことですが、詳しくはヘルプをご覧下さい。

procedure TForm1.Button1Click(Sender: TObject);
var
    w_s_datetime, w_e_datetime: TDateTime;
    w_interval: Integer;
    w_interval_d: Double;

begin

    Memo1.Clear;

    w_s_datetime := VarToDateTime('2016/4/9');
    w_e_datetime := VarToDateTime('2016/4/14');

    w_interval := DateUtils.DaysBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '日');

    w_s_datetime := VarToDateTime('2016/4/9');
    w_e_datetime := VarToDateTime('2016/7/14');

    w_interval := DateUtils.MonthsBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '月');

    w_s_datetime := VarToDateTime('2016/4/9');
    w_e_datetime := VarToDateTime('2017/4/14');

    w_interval := DateUtils.MonthsBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '月');

    w_s_datetime := VarToDateTime('2016/4/9');
 
    w_e_datetime := VarToDateTime('2017/4/14');

    w_interval := DateUtils.YearsBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '年');

    w_s_datetime := VarToDateTime('2019/4/9');
    w_e_datetime := VarToDateTime('2016/4/9');

    w_interval := DateUtils.YearsBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '年');

    w_s_datetime := VarToDateTime('2019/4/10');
    w_e_datetime := VarToDateTime('2016/4/9');

    w_interval := DateUtils.YearsBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '年');

    w_s_datetime := VarToDateTime('2016/4/9 9:00');
    w_e_datetime := VarToDateTime('2016/4/9 18:00');

    w_interval := DateUtils.HoursBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '時間');

    w_s_datetime := VarToDateTime('2016/4/9 9:00');
    w_e_datetime := VarToDateTime('2016/4/9 9:30');

    w_interval_d := DateUtils.HourSpan(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(FloatToStr(w_interval_d) + '時間');

    w_s_datetime := VarToDateTime('2016/4/9 9:00');
    w_e_datetime := VarToDateTime('2016/4/7 9:00');

    w_interval := DateUtils.HoursBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '時間');

    w_s_datetime := VarToDateTime('2016/4/9 9:00');
    w_e_datetime := VarToDateTime('2016/4/9 12:00');

    w_interval := DateUtils.MinutesBetween(w_s_datetime, w_e_datetime);
    Memo1.Lines.Add(IntToStr(w_interval) + '分間');

end;

このようになります。

 






関連記事
[Delphi] IncDay・IncHour 日付や時刻の加算減算

[Delphi]文字列の暗黙的なキャスト警告を消す方法

[Delphi]日付や時刻の分解と生成

[Delphi]クリップボード テキストのみ

[Delphi]2次元配列