Why have a tutorial just on dates and times?Because they are a
surprisingly complex and rich subject matter. And very useful, especially since
Delphi provides extensive support for calculations, conversions and names.
A D V E R T I S E M E N T
The TDateTime data typeDate and time processing depends on the
TDateTime variable. It is used to hold a date and time combination. It is
also used to hold just date or time values - the time and date value is ignored
respectively. TDateTime is defined in the System unit. Date constants and
routines are defined in SysUtils and DateUtils units.
Let us look at some simple examples of assigning a value to a TDateTime
variable:
var
date1, date2, date3 :
TDateTime; // TDateTime variables
begin
date1 :=
Yesterday;// Set to the start of
yesterday
date2 :=
Date; // Set to the start of the
current day
date3 :=
Tomorrow; // Set to the start of
tomorrow
date4 :=
Now;// Set to the current day and
time
end;
date1 is set to something like 12/12/2002 00:00:00
date2 is set to something like 13/12/2002 00:00:00
date3 is set to something like 14/12/2002 00:00:00
date4 is set to something like 13/12/2002 08:15:45
Note : the start of the day is often called midnight in Delphi documentation,
but this is misleading, since it would be midnight of the wrong day.
Some named date valuesDelphi provides some useful day and month names,
saving you the tedium of defining them in your own code. Here they are:
Short and long month names Note that these
month name arrays start with index = 1.
var
month : Integer;
begin
for month := 1 to 12 do //
Display the short and long month names
begin
ShowMessage ShortMonthNames[month]);
ShowMessage LongMonthNames[month]);
end;
end;
The
ShowMessage routine display the following information:
Jan
January
Feb
February
Mar
March
Apr
April
May
May
Jun
June
Jul
July
Aug
August
Sep
September
Oct
October
Nov
November
Dec
December
Short and long day namesIt is important to
note that these day arrays start with index 1 = Sunday. This is not a good
standard (it is not ISO 8601 compliant), so be careful when using with
ISO 8601 compliant routines such as
DayOfTheWeek
var
day : Integer;
begin
for day := 1 to 12 do //
Display the short and long day names
begin
ShowMessage(ShortDayNames[day]);
ShowMessage(LongDayNames[day]);
end;
end;
The ShowMessage routine display the following
information:
Sun
Sunday
Mon
Monday
Tue
Tuesday
Wed
Wednesday
Thu
Thursday
Fri
Friday
Sat
Saturday
Date and time calculationsThe largest benefit of TDateTime is the range
of calculations Delphi can do for you. These can be found on the Delphi Basics
home page, in the Dates and Times/Calculations option.
In the following examples, click on the name to learn more:
DayOfTheMonthGives
the day of month index for a TDateTime value
DaysBetweenGives
the whole number of days between 2 dates
DaysInAMonth
Gives the number of days in a month
DaysInAYearGives
the number of days in a year
DecodeDate
Extracts the year, month, day values from a TDateTime var.
EncodeDate
Build a TDateTime value from year, month and day values
IncDay
Increments a TDateTime variable by + or - number of days
IsLeapYear
Returns true if a given calendar year is a leap year
MinsPerDay
Gives the number of minutes in a day
Displaying date and time valuesThere are a number of routines that
convert date and or time values to strings for display or file storage purposes,
such as
dateTimeToStr and
TimeToString.
But the most important is the
FormatDateTime. It provides comprehensive formatting control, as illustrated
by the following examples.
var
myDate : TDateTime;
begin
// Set up our TDateTime variable with a full
date and time :
// 09/02/2000 at 05:06:07.008 (.008 milli-seconds)
myDate :=
EncodeDateTime(2000, 2, 9, 5, 6, 7, 8);
// Date only - numeric values with no leading
zeroes (except year)
ShowMessage('d/m/y = '+
FormatDateTime('d/m/y',
myDate));
// Date only - numeric values with leading
zeroes
ShowMessage(' dd/mm/yy = '+
FormatDateTime('dd/mm/yy',
myDate));
// Use short names for the day, month,
and add freeform text ('of')
ShowMessage('ddd d of mmm yyyy = '+
);
// Use long names for the day and month
ShowMessage('dddd d of mmmm yyyy = );
// Use the ShortDateFormat settings only
ShowMessage('ddddd = '+
FormatDateTime('ddddd',
myDate));
// Use the LongDateFormat settings only
ShowMessage(' dddddd = '
);
ShowMessage('');
// Time only - numeric values with no leading
zeroes
);
// Time only - numeric values with leading
zeroes
ShowMessage(' hh:nn:ss.zzz =);
// Use the ShortTimeFormat settings only
ShowMessage('t = );
// Use the LongTimeFormat settings only
ShowMessage(' tt = ')
// Use the ShortDateFormat + LongTimeFormat
settings
ShowMessage('c = '+
end;
The ShowMessage routine shows the following outputs :
d/m/y = 9/2/00
dd/mm/yy = 09/02/00
ddd d of mmm yyyy = Wed 9 of Feb 2000
dddd d of mmmm yyyy = Wednesday 9 of February 2000
ddddd = 09/02/2000
dddddd = 09 February 2000
c = 09/02/2000 01:02:03
h:n:s.z = 1:2:3.4
hh:nn:ss.zzz = 01:02:03.004
t = 01:02
tt = 01:02:03
c = 09/02/2000 01:02:03