в виде большого числа секунд,
uses linux;
Function GetTimeOfDay:longint;
Человеку сложно представлять время в виде большого числа секунд, поэтому в ОС UNIX существует набор библиотечных процедур для перевода системного времени в более понятную форму. Наиболее общей является процедура сtime, которая преобразует вывод вызова GetTimeOfDay в строку из 26 символов, например, выполнение следующей программы
uses linux,stdio;
var
tt:longint;
begin
tt:=gettimeofday;
write('Текущее время ', ctime (tt));
halt(0);
end.
дает примерно такой вывод:
Текущее время Tue Mar 18 00:17:06 1998
С функцией ctime связан набор процедур, использующих структуры типа tm. Тип структуры tm определен в файле stdio и содержит следующие элементы:
tm=record
tm_sec:longint; (* Секунды *)
tm_min:longint; (* Минуты *)
tm_hour:longint; (* Часы от 0 до 24 *)
tm_mday:longint; (* Дни месяца от 1 до 31 *)
tm_mon:longint; (* Месяц от 0 до 11 *)
tm_year:longint; (* Год минус 1900 *)
tm_wday:longint; (* День недели Воскресенье = 0 *)
tm_yday:longint; (* День года 0-365 *)
tm_isdst:longint; (* Флаг летнего времени только для США *)
end;
ptm=^tm;
Назначение всех элементов очевидно. Некоторые из процедур, использующих эту структуру, описаны ниже.
uses stdio;
function localtime(var _timeval:longint):ptm;
function gmtime(var _timeval:longint):ptm;
function asctime(const tptr:ptm):pchar;
function mktime(tptr:ptm):longint;
function difftime(time1, time2:longint):double;cdecl;external 'c';
Процедуры localtime и gmtime конвертируют значение, полученное в результате вызова GetTimeOfDay, в структуру tm и возвращают локальное время и стандартное гринвичское время соответственно. Например, программа
(* Программа tm - демонстрация структуры tm *)
uses linux,stdio;
var
t:longint;
tp:ptm;
begin
(* Получить системное время *)
t:=gettimeofday;
(* Получить структуру tm *)
tp := localtime (t);
printf ('Время %02d:%02d:%02d'#$a, [tp^.tm_hour, tp^.tm_min,
tp^.tm_sec]);
halt (0);
end.
выводит сообщение
Время 1:13:23
Процедура asctime преобразует структуру tm в строку в формате вывода процедуры ctime, а процедура
mktime преобразует структуру tm
в соответствующее ей системное время (число секунд). Процедура difftime возвращает разность между двумя значениями времени в секундах.
Другие функции для работы со временем:
EpochToLocal |
Преобразует время от начала эпохи в локальные дату и время |
GetDate |
Возвращает системную дату |
GetDateTime |
Возвращает системные дату и время |
GetEpochTime |
То же, что и GetTimeOfDay, но с учетом временной зоны |
GetLocalTimezone |
Возвращает системную временную зону |
GetTime |
Возвращает системное время |
GetTimezoneFile |
Возвращает имя файла временной зоны |
ReadTimezoneFile |
Возвращает содержимое файла временной зоны |
Пример использования GetEpochTime:
Uses linux;
begin
Write ('Secs past the start of the Epoch (00:00 1/1/1970) : ');
Writeln (GetEpochTime);
end.
Пример использования EpochToLocal:
Uses linux;
Var Year,month,day,hour,minute,seconds : Word;
begin
EpochToLocal (GetEpochTime,Year,month,day,hour,minute,seconds);
Writeln ('Current date : ',Day:2,'/',Month:2,'/',Year:4);
Writeln ('Current time : ',Hour:2,':',minute:2,':',seconds:2);
end.
Упражнение 12.3. Напишите свою версию процедуры asctime.
Упражнение 12.4. Напишите функцию weekday, возвращающую 1 для рабочих дней и 0 – для выходных. Напишите обратную функцию weekend. Эти функции также должны предоставлять возможность задания выходных дней.
Упражнение 12.5. Напишите процедуры, возвращающие разность между двумя значениями, полученными при вызове gettimeofday в днях, месяцах, годах и секундах. Не забывайте про високосные годы!