Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Функция DateSer

Delphi , Синтаксис , Дата и Время

Функция DateSer

Привет, я хочу в качестве совета поделиться функцией DateSer, которую я написал перед этим на VB. Данная функция весьма полезна но, к сожалению, ее нет в Delphi. Применяется она так:


DecodeDate(Date,y,m,d);
NewDate:=DateSer(y-4,m+254,d+1234);

или приблизительно так....


function DateSer(y, m, d: Integer): TDateTime;
const
  mj: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31,
    31, 30, 31, 30, 31);
var
  add: Integer;
begin
  while (true) do
  begin
    y := y + (m - 1) div 12;
    m := (m - 1) mod 12 + 1;
    if m <= 0 then
    begin
      Inc(m, 12);
      Dec(y);
    end;
    if ((y mod 4 = 0) and
      ((y mod 100 <> 0) or (y mod 400 = 0)))
      and (m = 2) then
      add := 1 //дополнительный день в феврале
    else
      add := 0;
    if (d > 0) and (d <= (mj[m] + add)) then
      break;
    if d > 0 then
    begin
      Dec(d, mj[m] + add);
      Inc(m);
    end
    else
    begin
      Inc(d, mj[m] + add);
      Dec(m);
    end;
  end;
  Result := EncodeDate(y, m, d);
end;

Here's the translation of the text into Russian:

Функция сериализации дат - это очень полезный инструмент для иметь.

Я должен сказать, что я впечатлен сложностью вашей реализации. Вы правильно обработали високосные годы и учли дополнительный день в феврале, когда это необходимо. Ваши использование массива для хранения количества дней в каждом месяце - это хорошая идея.

Теперь, пожалуйста, предложите некоторые советы по улучшению вашего кода:

  1. Вместо использования бесконечного цикла while, вы могли бы использовать цикл repeat-until или даже цикл for с условным заявлением о прекращении. Это сделает код более читаемым и понятным.
  2. Вы использовали оператор модуля (mod) широко в вашем коде. Хотя это не является по себе плохим, оно может сделать код труднее для понимания. Рассмотрите возможность использования более явных расчетов вместо зависимости от оператора модуля.
  3. Ваш код предполагает, что входные значения являются валидными (т.е., y - это год, m - месяц, а d - день). Вы можете добавить некоторые проверки на ошибку для обеспечения того, что эти предположения верны.
  4. Рассмотрите возможность добавления комментариев документации к вашей функции, чтобы объяснить ее цель, параметры и возвращаемое значение.

Вот обновленная версия вашего кода с некоторыми из этих предложений реализованными:

function DateSer(y, m, d: Integer): TDateTime;
const
  MJ: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var
  add: Integer;
begin
  repeat
    y := y + (m - 1) div 12;
    m := (m - 1) mod 12 + 1;
    if m <= 0 then
    begin
      Inc(m, 12);
      Dec(y);
    end;

    add := 0;
    if ((y mod 4 = 0) and ((y mod 100 <> 0) or (y mod 400 = 0))) and (m = 2) then
      add := 1; // дополнительный день в феврале

    if d > 0 and d <= (MJ[m] + add) then
      break;

    if d > 0 then
    begin
      Dec(d, MJ[m] + add);
      Inc(m);
    end
    else
    begin
      Inc(d, MJ[m] + add);
      Dec(m);
    end;
  until false;

  Result := EncodeDate(y, m, d);
end;

Надеюсь, это поможет! Пожалуйста, дайте мне знать, если у вас есть какие-либо дальнейшие вопросы или Concerns.

В статье описывается функция DateSer, написанная на языке Delphi, которая позволяет декодировать и кодировать даты в формате YYYY-MM-DD.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Дата и Время ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:13:31/0.0056760311126709/1