TDateTime Free Pascal въвеждане и извеждане на данни

Във Free Pascal всеки компонент на стойността на календарна дата и час на по-ниско ниво (година, месец, ден, час, минута и т.н.) се представя от целочислена стойност от тип Word. Следователно няма проблеми с автономния вход или изход на всеки от тях. Това обаче не е най-оптималният начин, тъй като в ежедневието използваме редица по-удобни начини за символно записване на дати и часове. Ето само няколко от тях:

± 17/07/2000 или 17-07-2000 — варианти на компактна нотация с други разделители;

± 17.07.00 - съкратена версия на компактната нотация;

± 12 часа 35 минути - детайлен запис на времето;

± 12:35 е компактен запис на времето.

Има естествено желание да въведете символичен запис за дата и час в един от установените формати и след това да конвертирате въведения низ във вътрешния формат TDateTime. Листинг 14.1 демонстрира тази възможност.

Списък 1 4 .1 . Конвертор на формат на дата date1

използва DateUtils, SysUtils; вар

dt : TdateTime; s : низ

fmt : низ = 'dd.mm.yyyy hh:nn:ss';

write('Въведена дата: '); // заявка за дата

readln(s); // въвеждане на низ

dt := StrToDateTime(s); // преобразуване в TDateTime

writeln('Дата = ',FormatDateTime(fmt,dt)); readln;

Нейният протокол е следният:

Същата програма демонстрира как да конвертирате дата от формат TDateTime в символен низ с помощта на функцията FormatDateTime.

Моля, имайте предвид, че всяка грешка при въвеждане на датата може

водят до извънредна ситуация. Например, ако използвате запетая вместо разделителя "точка". Или вместо валиден номер на ден, например, наберетеизречение 32:

Възникна необработено изключение при $0040CCC0:

EConvertError: 2000-7-32 не е валидна спецификация за дата

Има две системни променливи, които определят правилата за въвеждане на стойности за дата. Първият от тях - ShortDateFormat - регулира реда на компонентите на датата. Вторият, DateSeparator, дефинира разделителния знак между компонентите на датата. Техните стойности по подразбиране могат да бъдат показани, за да се запознаете с установените правила за задаване на дата (списък 14.2).

Списък 14.2. програма date2

използва DateUtils, SysUtils; започвам

writeln('ShortDateFormat = ',ShortDateFormat); writeln('DateSeparator = ',DateSeparator); readln;

Резултатът показва, че редът на компонентите на датата е ден (една или две цифри), месец (една или две цифри) и година (четири цифри).

И точка се използва като разделител на компонентите на датата:

Изпълнява се "e:\fpc\myprog\date2.exe " ShortDateFormat =dd.MM.yyyyDateSeparator =.

Имате право да промените стойността на всяка от тези променливи и след такава промяна новите правила за задаване на дата ще влязат в сила (списък 14.3).

Списък 14.3. програма date3

използва DateUtils, SysUtils; вар

dt : TdateTime; s : низ

fmt : низ = 'dd.mm.yyyy hh:nn:ss'; започвам

Разделител за дата := '-'; // нов разделител ShortDateFormat:='yyyy-mm-dd'; // нова последователност от данниwrite('Въведена дата: '); // заявка за дата

readln(s); // редов вход

dt := StrToDateTime(s); // конвертиране в TDateTime writeln('Date = ',FormatDateTime(fmt,dt));

В резултат на това променихме реда на компонентите и заменихме знака за разделител:

Стартиране на "e:\fpc\myprog\date3.exe " Дата на въвеждане:2000-07-1711:03:55

При въвеждане на дата и час, вместо пълна група от техните компоненти, можем да се ограничим до набор от само една или две първи стойности. В този случай функцията StrToDateTime следва следната стратегия. Липсващите полета за дата се попълват със системни (текущи) стойности за месец и/или година. Липсващите полета за време се попълват с нулеви стойности.

Функцията ScanDateTime е подобна по предназначение на функцията StrToDateTime, но има малко по-широки възможности. В най-съкратената си форма извикването на функцията ScanDateTime приема два аргумента (списък 14.4).

Списък 14.4. програма date4

използва DateUtils, SysUtils; вар

fmt2: низ = 'dd.mm.yyyy hh:nn:ss'; dt : TdateTime;

writeln('Дата = ',FormatDateTime(fmt2,dt)); readln;

Първият аргумент на функцията ScanDateTime е шаблон, който описва формата на компонентите за дата и час в стойността на втория аргумент (низ s). По-сложна модификация на функцията ScanDateTime включва указване на третия незадължителен целочислен параметър ind. В този случай сканирането на низа s започва със знака s[ind].

Да конвертирате дата от формата TDateTime в низ с един или друг вариант

Функцията FormatDateTime се използва за представяне на стойности на календарни дати и показания на компютърния часовник:

s := FormatDateTime(Fmt, dt);

Тази функция връща низова стойност, в която стойностите за дата и час се формират според форматните указатели в Fmt низа. Списъкът с възможни указатели на формати е даден в таблица. 14.2.

Еквивалент на „ddddd t“ (кратки формати за дата и час)

Ден от месеца (една или две цифри - 1, 2, ..., 9, 10, 11, ...)

Ден от месеца (две цифри- 01, 02, ...)

Ден от седмицата (кратко означение)

Ден от седмицата (пълно обозначение на символа)

Месец (една или две цифри - 1, 2, ..., 9, 10, 11, 12)