TDateTime

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) suomi (fi)

TDateTime is stored as a double, the integer part representing days and the fractional part being fraction of a day. The integer part is the number of days that have passed since December 30, 1899, and can be a negative number. The fractional part reflects the fraction of a 24-hour day without regard to the sign of the TDateTime value, so care must be taken when computing negative TDateTime values with a fractional part.
Methods exist in Sysutils (datetimeroutines) that allow reading, writing and calculating with TDateTime, converting to and from a number of formats.
The following table displays examples of TDateTime values and their corresponding dates and times:

Double Value 'dd-mm-yyyy hh:nn:ss'
-1.75 29-12-1899 18:00:00
-1.5 29-12-1899 12:00:00
-1.25 29-12-1899 06:00:00
0 30-12-1899 00:00:00
1.25 31-12-1899 06:00:00
2.25 01-01-1900 06:00:00
25569 01-01-1970 00:00:00 (Unix Epoch)
36152.5 23-12-1998 12:00:00 (FPC 1.0 Beta2)
36526 01-01-2000 00:00:00
44927 01-01-2023 00:00:00


Get current time

Unit SysUtils function Now retrieves the current system date and time.

 function Now : TDateTime;

Adding and subtracting TDateTime

Unit DateUtils function DaysBetween tell number of whole days between two DateTime values.

  function DaysBetween ( const ToDate, FromDate : TDateTime ) : Integer;

Unit DateUtils function WeeksBetween tell number of whole weeks between two DateTime values.

  function WeeksBetween( const ToDate, FromDate : TDateTime ):Integer;


program DateProject1;

uses
  SysUtils,DateUtils;
const
  DateFormatChars = 'dd"/"mm"/"yyyy';
var
  DateTime1, DateTime2: TDateTime;
begin
  DateTime1 := now;
  DateTime2 := DateTime1 + 4*7;       //28 days later
  WriteLn('Current date is '+ FormatDateTime( DateFormatChars, DateTime1 ));
  WriteLn('28 days later date is '+ FormatDateTime( DateFormatChars, DateTime2 ));
  WriteLn('Number of days is '+ ( DaysBetween( DateTime1 ,DateTime2)).ToString );
  WriteLn('Number of weeks is '+ ( WeeksBetween( DateTime1 ,DateTime2)).ToString );
  ReadLn;
end.

Set Date

Unit SysUtils function EncodeDate to set the date.

  function EncodeDate ( const Year, Month, Day : Word ) : TDateTime;

Compare two TDateTime

program CompareTwoDateTime;

uses
  SysUtils, DateUtils;
var
   firstDate, secondDate: TDateTime;
begin
  firstDate := EncodeDate(2000, 2, 29);
  secondDate := EncodeDate(2018, 8, 11);
  if DaysBetween( firstDate, secondDate) = 0
    then WriteLn('Both dates are same')
    else
      if firstDate < secondDate
        then WriteLn('First date is earlier')
        else WriteLn('First date is later');
  ReadLn;
end.

See also