Функція EndOfADay в Delphi генерує значення TDateTime, встановлене на кінець дня.
DateUtils unit
- function EndOfADay (const Year, Month, Day : Word) : TDateTime;
- function EndOfADay (const Year, DayOfYear : Word) : TDateTime;
Функція EndOfADay генерує значення TDateTime, встановлене на заданий рік, місяць і день з часом, встановленим на 1 мілісекунду перед опівночі.
Версія 1
Дозволяє визначити окремо Місяць (Month) і День (Day). Місяць має бути між 1 (Січень) та 12 (Грудень). День має бути між 1 і 31, залежно від року та місяця.
Версія 2
Дозволяє, натомість, визначити Місяць (Month) і День (Day) як DayOfYear.
Попередження.
У Delphi є помилка (як перевірено автором за допомогою Delphi 7.0 Professional build 4.453), де версія з довгим синтаксисом неправильно використовує процедуру EndOfAMonth для обчислення кінця дня.
Помилки значення параметра дають EConvertError.
Функція EndOfADay: Встановлення дати на останню мілісекунду 20 століття – ілюстрація бага Delphi
var
mydate : TDateTime;
begin
myDate := EndOfADay(1999, 365);
// Гарантуємо, що мілісекунди будуть показані
LongTimeFormat := 'hh:mm:ss.zzz';
ShowMessage('Кінець 1999, використовуючи короткий синтаксис = '+DateTimeToStr(myDate));
myDate := EndOfADay(1999, 12, 31);
// Гарантуємо, що мілісекунди будуть показані
LongTimeFormat := 'hh:mm:ss.zzz';
ShowMessage('Кінець 1999, використовуючи довгий синтаксис = '+DateTimeToStr(myDate));
ShowMessage('ПОПЕРЕДЖЕННЯ — вищезазначене значення неправильне');
end;
Результат
Кінець 1999, використовуючи короткий синтаксис = 31/12/1999 23:59:59.999
Кінець 1999, використовуючи довгий синтаксис = 30/01/2000 23:59:59.999
ПОПЕРЕДЖЕННЯ — вищезазначене значення неправильне
Подібні функції, процедури та команди
EndOfAMonth — генерація значення TDateTime, встановлене на кінець місяця.