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

Преобразование даты типа TDateTime в дату прописью

Delphi , Синтаксис , Преобразования

Преобразование даты типа TDateTime в дату прописью

Автор: LexusR
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> преобразование даты типа TDateTime в дату прописью

преобразование даты типа TDateTime в дату прописью
типа : "четырнадцатое ноября две тысячи третьего года"

Зависимости: Windows,SysUtils
Автор:       LexusR, ICQ:41627622, Novosibirsk
Copyright:   LexusR
Дата:        12 декабря 2003 г.
***************************************************** }

const
  MonthNames: array[1..12] of string = ('января', 'февраля', 'марта', 'апреля',
    'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября',
      'декабря');
  NamesOfThousand0: array[1..2] of string = ('тысячного', 'двухтысячного');
  NamesOfThousand: array[1..2] of string = ('одна тысяча', 'две тысячи');
  NamesOfHandreds0: array[1..9] of string = ('сотого', 'двухсотого',
    'трехсотого',
    'четырехсотого', 'пятисотого', 'шестисотого', 'семисотого',
    'восьмисотого', 'девятисотого');
  NamesOfHandreds: array[1..9] of string('сто', 'двести', 'триста', 'четыреста',
    'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот');
  NamesOfTens00: array[1..3] of string('десятое', 'двадцатое', 'тридцатое');
  NamesOfTens0: array[1..9] of string('десятого', 'двадцатого',
    'тридцатого', 'сорокового', 'пятидесятого', 'шестидесятого',
    'семидесятого', 'восьмидесятого', 'девяностого');
  NamesOfTens: array[2..9] of string = ('двадцать', 'тридцать', 'сорок',
    'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто');
  NamesOfFistTen0: array[1..9] of string = ('одинадцатое', 'двенадцатое',
    'тринадцатое', 'четырнадцатое', 'пятнадцатое', 'шестнадцатое',
      'семнадцатое',
    'восемьнадцатое', 'девятнадцатое');
  NamesOfFistTen: array[1..9] of string = ('одинадцатого', 'двенадцатого',
    'тринадцатого', 'четырнадцатого', 'пятнадцатого', 'шестнадцатого',
    'семнадцатого', 'восемьнадцатого', 'девятнадцатого');
  NamesOfUnits0: array[1..9] of string = ('первое', 'второе', 'третье',
    'четвертое', 'пятое', 'шестое', 'седьмое', 'восьмое', 'девятое');
  NamesOfUnits: array[1..9] of string = ('первого', 'второго', 'третьего',
    'четвертого', 'пятого', 'шестого', 'седьмого', 'восьмого', 'девятого');

function ConvertDateToString(Date: TDateTime): string;
var
  year, month, day: word;
  th, hn, tn, un: word;
begin
  DecodeDate(Date, year, month, day);
  // разбираем число
  tn := day div 10;
  un := day mod 10;
  if un = 0 then
    result := NamesOfTens00[tn]
  else if tn = 0 then
    result := NamesOfUnits0[un]
  else if tn = 1 then
    result := NamesOfFistTen0[un]
  else
    result := NamesOfTens[tn] + ' ' + NamesOfUnits0[un];
  // разбираем месяц
  result := result + ' ' + MonthNames[month];
  // разбираем год
  th := year div 1000;
  hn := year mod 1000 div 100;
  tn := year mod 1000 mod 100 div 10;
  un := year mod 1000 mod 100 mod 10;
  if ((hn = 0) and (tn = 0) and (un = 0)) then
  begin
    result := result + ' ' + NamesOfThousand0[th] + ' года';
    exit;
  end
  else
    result := result + ' ' + NamesOfThousand[th];
  if hn > 0 then
  begin
    if ((tn = 0) and (un = 0)) then
    begin
      result := result + ' ' + NamesOfHandreds0[hn] + ' года';
      exit;
    end
    else
      result := result + ' ' + NamesOfHandreds[hn];
  end;
  if un = 0 then
    result := result + ' ' + NamesOfTens0[tn]
  else if tn = 0 then
    result := result + ' ' + NamesOfUnits[un]
  else if tn = 1 then
    result := result + ' ' + NamesOfFistTen[un]
  else
    result := result + ' ' + NamesOfTens[tn] + ' ' + NamesOfUnits[un];
  result := result + ' года'
end;

Код на Delphi, предназначенный для конвертации значения TDateTime в строку, представляющую дату на русском языке.

Процесс работы следующий:

  • Функция DecodeDate разбивает дату на ее годовой, месячный и деньовые компоненты.
  • Затем она строит строку даты, конкатенируя день с именем месяца и годовой частью.

Годовая часть строится путем парсинга значения года в тысячи, сотни, десятки и единицы.

Например, если год равен 2003, то он будет распарсен следующим образом:

  • Тысячи: 2
  • Сотни: 0 (потому что нет сотен)
  • Десятки: 0 (потому что нет десятков)
  • Единицы: 3

Часть тысячи будет "двухтысячного", а часть единиц - "третьего".

Наконец, строка даты строится путем конкатенирования всех этих частей вместе.

Пример использования кода:

var
  Date: TDateTime;
begin
  Date := Date(); // текущая дата и время
  writeln(ConvertDateToString(Date));
end.

Вывод будет выглядеть примерно так: "четырнадцатое ноября две тысячи третьего года".

Обратите внимание, что этот код предполагает, что региональные настройки системы установлены на русском языке. Если вы хотите поддерживать другие языки, вам нужно добавить дополнительные массивы и логику для обработки различных форматов дат.

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


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

Получайте свежие новости и обновления по 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:17:27/0.0059230327606201/1