Моя IDE — RAD Studio 10.3.
Настройка моего проекта в информации о версии: «Автоматическое создание номера сборки».
Этот номер выпуска — 9004. Rad Studio Wiki (Выпуск = количество дней с 1 января 2000 г.) Сборка моего проекта 2024.08.26.
Это код, но дата неправильная.
procedure TForm1.FormCreate(Sender: TObject);
var
A, B, I, Y, R, M, Months, Days, o1, o2, o3: Integer;
begin
A := 9004;
B := 43904;
Y := 2000;
Days := 0;
while Days < A do begin
if (IsLeapYear(Y)) then begin
Inc(Days,366);
end Else begin
Inc(Days,365);
end;
Inc(Y);
end;
Dec(Y);
if (IsLeapYear(Y-1)) then
Dec(Days,366)
Else
Dec(Days,365);
R := A - Days;
Months := 1;
M := 0;
while M < R do begin
Inc(M,DaysInAMonth(Y,Months));
Inc(Months);
end;
Dec(Months);
Dec(M,DaysInAMonth(Y,Months));
ShowMEssage(IntToStr(Y)+' - '+IntTOStr(Months)+' - '+IntToStr(R-M)); // 2024-08-24 Why ????
end;
В вашем коде две ошибки:
IsLeapYear(Y-1)
должно быть IsLeapYear(Y)
, потому что вы уже уменьшили Y в строке ранее.(R-M)
указан день до ожидаемой даты, поскольку первый день месяца равен 1, а не 0. Так что (R-M+1)
будет правильным термином.Однако я предлагаю использовать правильные функции:
var dt := IncDay(EncodeDate(2000, 1, 1), 9004);
Большое спасибо!
Почему бы не использовать значения TDate? Это было бы намного проще.