トップへ(mam-mam.net/)

日付時刻を扱う関数(Today,Now,EncodeDateTime,EndOfAMonth,DayOf) ~Delphiソースコード集

日付時刻を扱う関数(Today,Now,EncodeDateTime,EndOfAMonth,DayOf) ~Delphiソースコード集

Delphiには日付時刻を扱うユニット「System.DateUtils」があります。
uses System.DateUtils;
とすると日付時刻を操作する関数が使えるようになります。
よく使う関数のサンプルソースコードを示します。

Today関数

本日の日付のみを返す。
Today():TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=Today();
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/02/01 00:00:00.000が表示される

Now関数

本日の日付時刻を返す。
Now():TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=Now();
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/02/01 22:03:01.054が表示される

EncodeDateTime関数

指定した年,月,日,時,分,秒,ミリ秒を表すTDateTime(日付時刻)型の値を返す。
EncodeDateTime(年,月,日,時,分,秒,ミリ秒:Word):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 30, 1, 1, 1, 0);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/12/30 01:01:01.000が表示される

EncodeDate関数

指定した年,月,日を表すTDateTime(日付時刻)型の値を返す。
EncodeDateTime(年,月,日:Word):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 31);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/12/31 00:00:00.000が表示される

EncodeTime関数

指定した時,分,秒,ミリ秒を表すTDateTime(日付時刻)型の値を返す。
EncodeDateTime(時,分,秒,ミリ秒:Word):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeTime(1, 1, 1, 999);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  1899/12/30 01:01:01.999/span>が表示される

DateOf関数

指定した日付時刻から「時,分,秒,ミリ秒」を0にしたTDateTime(日付時刻)型の値を返す。
DateOf(日付時刻:TDateTime):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 30, 12, 24, 32, 999);
  d:=DateOf(d);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/12/30 00:00:00.000/span>が表示される

TimeOf関数

指定した日付時刻から年月日を削除したTDateTime(日付時刻)型の値を返す。
TimeOf(日付時刻:TDateTime):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 30, 12, 24, 32, 999);
  d:=TimeOf(d);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  1989/12/30 12:24:32.999が表示される

EndOfAMonth関数

指定年月の最終日の23:59:59.999を返す。
EndOfAMonth(年, 月:Word):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EndOfAMonth(2025, 2);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/02/28 23:59:59.999が表示される
uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=DateOf(EndOfAMonth(2025, 2)); //時刻を00:00:00.000にする
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/02/28 00:00:00.000が表示される

DayOf関数

指定日時の「日」のみの値を返す。
DayOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EndOfAMonth(2025, 2);
  Showmessage(DayOf(d).ToString);
end;
//  28が表示される

MonthOf関数

指定日時の「月」のみの値を返す。
MonthOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(MonthOf(d).ToString);
end;
//  2が表示される

YearOf関数

指定日時の「年」のみの値を返す。
YearOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(YearOf(d).ToString);
end;
//  2025が表示される

HourOf関数

指定日時の「時」のみの値を返す。
YearOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(HourOf(d).ToString);
end;
//  1が表示される

MinuteOf関数

指定日時の「分」のみの値を返す。
MinuteOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(MinuteOf(d).ToString);
end;
//  2が表示される

SecondOf関数

指定日時の「秒」のみの値を返す。
SecondOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(SecondOf(d).ToString);
end;
//  3が表示される

MilliSecondOf関数

指定日時の「ミリ秒」のみの値を返す。
MilliSecondOf(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(MilliSecondOf(d).ToString);
end;
//  4が表示される

DayOfTheWeek関数

指定日時の「曜日」の値を返す。(1:月曜日、2:火曜日、3:水曜日、4:木曜日、5:金曜日、6:土曜日、7:日曜日)
DayOfTheWeek(日時:TDateTime):Word

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(DayOfTheWeek(d).ToString);
end;
//  5が表示される
uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
const
    week:array[0..6] of String=('月','火','水','木','金','土','日');
begin
  d:=EncodeDateTime(2025, 2, 28, 1, 2, 3, 4);
  Showmessage(week[DayOfTheWeek(d)-1]);
end;
//  が表示される

DecodeDateTime関数

日付時刻を「年,月,日,時,分,秒,ミリ秒」に分解する。
DecodeDateTime(日時:TDateTime, Out 年,月,日,時,分,秒,ミリ秒:Word):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
    year,month,day,hour,minute,sec,msec:Word;
begin
  d:=EncodeDateTime(2025, 12, 30, 12, 24, 32, 999);
  DecodeDateTime(d, year,month,day,hour,minute,sec,msec);
  Format('%d/%d/%d %d:%d:%d.%d', [year,month,day,hour,minute,sec,msec]);
end;
//  2025/12/30 12:24:32.999が表示される

IncDay関数

日付時刻に指定された日数を足した日付時刻を返す。
IncDay(日時:TDateTime, 足す日数:Integer=1):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 30, 1, 2, 3, 4);
  d:=incDay(d, 2);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2026/01/01 01:02:03.004が表示される
uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=EncodeDateTime(2025, 12, 30, 1, 2, 3, 4);
  d:=incDay(d, -2);
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  2025/12/28 01:02:03.004が表示される

DateTimeToUnix関数

日付時刻をUNIXタイムスタンプ値に変換して返す。
DateTimeToUnix(日付時刻:TDateTime, AInputIsUTC:Boolean=True):Int64

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
    i:INT64;
begin
  d:=EncodeDateTime(1970, 1, 1, 9, 0, 1, 0);  // 1970/1/1 09:00:01 UTC
  i:=DateTimeToUnix(d, True); //True:与えた日付時刻値はUTC
  Showmessage(i.ToString);
end;
//  32401が表示される
uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
    i:INT64;
begin
  d:=EncodeDateTime(1970, 1, 1, 9, 0, 1, 0);  // 1970/1/1 09:00:01 JST
  i:=DateTimeToUnix(d, False); //True:与えた日付時刻値はUTCではない(JST)
  Showmessage(i.ToString);
end;
//  1が表示される

UnixToDateTime関数

UNIXタイムスタンプ値を日付時刻型に変換して返す。
UnixToDateTime(UNIXタイムスタンプ値:Int64, AReturnUTC:Boolean=True):TDateTime

uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=UnixToDateTime(32401,True);  // UTCとして返してもらう
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  1970/01/01 09:00:01.000が表示される
uses System.DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
var d:TDateTime;
begin
  d:=UnixToDateTime(32401,False);  // JSTとして返してもらう
  Showmessage(FormatDateTime('yyyy/mm/dd hh:nn:ss"."zzz', d));
end;
//  1970/01/01 18:00:01.000が表示される