Блог Александра Божко
Архивы
Рубрики

DayOfTheWeek

Казалось бы количество версий Delphi перевалило за два десятка, и уж белых пятен, по крайней мере  относительно функций даты и времени, быть не должно. Действительно, появившийся, если не ошибаюсь, в Delphi 7, модуль DateUtils, казалось бы снимает все вопросы. Однако, не тут то было!

В доставшемся мне от предшественников проекте я тщательно вычистил функции подобные StartOfTheWeek или StartOfTheDay. Первая версия проекта была написана, похоже, на Delphi 5, в которой DateUtils просто еще не было. Потом этот модуль появился, а я, унаследовав проект, решил, что нет смысла таскать “лишний” код, а проще подключить DateUtils. И вот недавно я получил получил забавный баг. Приложение определяет всегда первый день недели – понедельник. Хотя, у большинства пользователей первым днем является воскресенье.

Первым делом проверил StartOfTheWeek, и с удивлением обнаружил, что и в самом деле, функция всегда возвращает начало понедельника, в качестве результата. А соответствующий справки содержит следующую ремарку:

Note:StartOfTheWeek defines the week of AValue according to the ISO 8601 standard. That is, the week starts on Monday and ends on Sunday.

Лично мне не совсем понятно, почему данная функция реализована именно так, тем не менее, факт остается фактом. Но, как в свое время говаривала Лия Ахиджакова: “Надо что-то с этим делать, бороться как-то!”

Смотрим код функции:

function StartOfTheWeek(const AValue: TDateTime): TDateTime;
begin
  Result := Trunc(AValue) - (DayOfTheWeek(AValue) - 1);
end;

Как видим, в коде используется функция DayOfTheWeek, которая так же считает, что первым днем недели является понедельник. Код функции такой:

  Читать далее

Продукты DevArt
Купить онлайн:



Читай русскоязычные Delphi блоги
Каталог блогов Blogdir.ru
Яндекс.Метрика