TryEncodeDateWeek calculates the TDateTime value that represents a specified day of a specified week in a specified year, and tests whether a valid TDateTime value would be generated from the specified individual parts.

There are constraints as to the values that are accepted for the input parameters.

  • AYear must be between 1 and 9999 inclusive.

  • AWeekOfYear is the week number within the specified year, where 1 is the first week that has four or more days.

    • If the first calendar day of the year is a Friday, Saturday, or Sunday, then those three days must be expressed using AYear set to the previous year, and AWeekOfYear set to the number of weeks in the previous year.

    • Similarly, if the last calendar day of the year is a Monday, Tuesday, or Wednesday, then those three days are expressed with AYear set to the following year and AWeekOfYear set to 1.

  • ADayOfWeek is the day of the week, where 1 is Monday and 7 is Sunday.

AValue returns the specified date as a TDateTime value, where the time portion is set to midnight 00:00:00 at the start of the specified day.

If the specified values are within range, the TryEncodeDateWeek function returns a boolean value of True, and the encoded TDateTime value is available from the output parameter AValue.

If any of the specified values are not within range, TryEncodeDateWeek returns a boolean value of False, and the output parameter AValue is set to zero.

Declaration: Function TryEncodeDateWeek(const AYear, AWeekOfYear: Word; out AValue: TDateTime; const ADayOfWeek: Word): Boolean;

For example.

procedure OnMapEvent(var Value:Variant);
var
aYear, aWeek, aDay : word;
TheDate, ThatDate : TDateTime;
aGo: boolean;
begin
//This first test will pass
aYear := 2024;
aWeek := 27;
aDay := 5;
TheDate := EncodeDateWeek(aYear, aWeek, aDay) //Date is 05-05-2024
LogInfo(FormatDateTime('dd-mm-yyyy hh:nn:ss.zzz', TheDate));
aGo := TryEncodeDateWeek(aYear, aWeek, ThatDate, aDay);
If aGo = True then
LogInfo('The date works.')
else
LogInfo('The date DOES NOT work.');
//This next test will fail
aYear := 2024;
aWeek := 31;
aDay := 8;
aGo := TryEncodeDateWeek(aYear,aWeek, ThatDate, aDay);
If aGo = True then
LogInfo('The date works.')
else
LogInfo('The date DOES NOT work.');
 
end;