| FUNCTION WhatDay( Year, Month, Day : Word ) : DayString;

| VAR

| Y, M, D, n : Word;

| BEGIN

| GetDate( Y, M, D, n ); { запоминание текущей даты }

| SetDate( Year,Month,Day ); { установка даты из запроса }

| GetDate( Year,Month,Day,n); {получение по ней номера n }

| WhatDay := Days[n]; { номер n дает название дня }

| SetDate(Y, M, D ) { восстановление даты в ПЭВМ }

| END;

| VAR { -- ПРИМЕР ВЫЗОВА -- }

| у, m, d : Word;

| BEGIN

| Write( 'Введите год ' ); ReadLn( у );

| Write( 'Введите месяц' ); ReadLn( m );

| Write( 'Введите число' ); ReadLn( d );

| WriteLn;

| WriteLn(d:2,'/', m:1,'/',y:4,'-->',WhatDay(y,m,d));

| ReadLn { пауза до нажатия клавиши ввода }

| END.

Рис. 16.3

<p>16.2.2. Опрос и назначение времени</p>

Процедуры GetTime(VAR Hour, Min, Sec, Sec100 : Word ) и SetTime( Hour, Min, Sec, Sec100: Word) опрашивают и устанавливают значение текущего времени во встроенных часах ПЭВМ. Обе процедуры используют одинаковую последовательность параметров:

( часы, минуты, секунды, миллисекунды )

При установке времени процедурой SetTime их можно задавать непосредственно значениями. Разрешенные значения для установки времени таковы: часы — 0...23, минуты и секунды — 0...59, миллисекунды — 0...99. При нарушении диапазонов время не устанавливается.

- 352 -

Неаккуратное использование процедуры SetTime может сильно изменить представление компьютера о времени, зато процедура GetTime вполне безопасна. С ее помощью можно сделать счетчик времени работы программы. Схема включения процедур в программу приводится на рис. 16.4.

| USES DOS;

| VAR

| h, min, s, ms : Word; { отсечки времени по часам }

| Time : Real; { время работы в секундах }

| BEGIN

| GetTime( h, min, s, ms ); { начало работы программы }

| { время начала программы в секундах : }

| Time := ( h*60 + min )*60 + s + ms/100;

| { === программа работает - время идет === }

| Write(' Нажмите ENTER' ); ReadLn;

| GetTime( h, min, s, ms ); { конец работы программы }

| { время работы программы в секундах : }

| Time := ( h*60 + min )*60 + s + ms/100 - Time;

| ms:= Trunc( 100 * Frac( Time ) ); { миллисекунды }

| h := Trunc( Time ) div 3600; { часы }

| min := Trunc( Time-3600*h ) div 60; { минуты }

| s := Trunc( Time-3600*h ) mod 60: { секунды }

| WriteLn( 'Активное время работы , h:1,' ч ',

| min:1, ' мин ', s:1, ',' , ms:1, ' с' );

| ReadLn { пауза... }

| END.

Рис. 16.4

<p>16.2.3. Работа с датой создания файлов</p>

Работа с датой создания файлов — в общем-то, не первая необходимость. Но для написания антивирусных программ, для ведения картотек и баз данных или анализа файлов данных — это «рабочий» инструмент.

Для работы с файлами в модуле DOS вводится предопределенный тип с именем DateTime. Это запись со структурой

TYPE

DateTime = RECORD

Year, Month, Day, Hour, Min, Sec : Word;

END;

- 353 -

Поля этой записи представляют собой нормальные значения даты и времени, с ограничением лишь на диапазон возможных значений: Year имеет диапазон 1980...2099, Month — 1...12, Day — 1...31, Hour — 0...23, Min и Sec — 0...59.

В MS-DOS вся эта информация упакована в четыре байта, что соответствует типу LongInt Турбо Паскаля. Для преобразования даты и времени в формат MS-DOS служит процедура

PackTime( VAR DT : DateTime; VAR Т : LongInt )

Для обратного кодирования из LongInt в DateTime служит процедура

UnPackTime ( Т : LongInt; VAR DT : DateTime )

Но обе эти процедуры имеют смысл только в сопряжении с процедурами чтения и записи времени создания файла:

GetFTime( VAR f; VAR Т : LongInt )

и

SetFTime( VAR f; Т : LongInt )

Перейти на страницу:

Поиск

Похожие книги