
C_Kurs_Lekt / C_III_семестр / 14_Time_timer
.pdf
ФУНКЦИИ ДЛя РАБОТЫ СО ВРЕМЕНЕМ И ДАТОЙ
|
|
clock |
Определяет процессорное время |
|
|
|
|
|
|
|
|
|
|
|
Назначение |
Определяет процессорное время. |
|||
|
|
|||
|
Синтаксис |
#include <time.h> |
|
|
|
|
clock_t clock(void); |
||
|
Замечания |
clock может |
быть использована для определения интервала времени между |
|
|
|
двумя событиями. |
||
|
|
Для определения интервала времени в секундах, значение, возвращаемое |
||
|
|
функцией clock, необходимо разделить на значение макроопределения CLK_TCK. |
||
|
|
|||
|
Возвращаемое |
Функция clock возвращает процессорное время, прошедшее с момента начала |
|
|
значение |
выполнения программы. Функция clock возвращает значение -1, если |
|||
|
|
процессорное время недоступно или не может быть отображено как тип |
||
|
|
clock_t. |
|
|
#include <time.h> #include <stdio.h> #include <dos.h> int main(void){
clock_t start, end; start = clock(); delay(2000);
end = clock();
printf(" Время было: %f\n", (end-start) / CLK_TCK); return 0;
}
difftime Вычисляет разницу между двумя моментами времени
|
Назначение |
|
Вычисляет разницу между двумя моментами времени. |
||||||
|
|
|
|
|
|
|
|
|
|
|
Синтаксис |
|
#include <time.h> |
|
|
|
|
||
|
|
|
|
double difftime(time_t time2, time_t time1); |
|||||
|
|
|
|
|
|
|
|||
|
|
Замечания |
|
difftime вычисляет время в секундах, пройденное между time1 и time2. |
|||||
|
Возвращаемое |
diftime возвращает |
разницу |
между |
двумя моментами времени (типа |
||||
|
значение |
|
double). |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <time.h> |
|
|
|
|
|
|
||
#include <stdio.h> |
|
|
|
|
|||||
#include <dos.h> |
|
|
|
|
|
|
|||
#include <conio.h> |
|
|
|
|
|||||
int main(void){ |
|
|
|
|
|
|
|||
|
|
time_t first, second; |
|
|
|
|
|||
|
|
clrscr(); |
|
|
|
|
|
|
|
|
|
first = time(NULL); /* получить системное время */ |
|
|
|||||
|
|
delay(2000); /* подождать 2 секунды */ |
|
|
|
||||
|
|
second = time(NULL); /* снова получить системное время */ |
|
|
|||||
|
|
printf("Разница между двумя замерами - %f секунд\n", |
|
|
|||||
|
|
difftime(second,first)); getch(); |
|
|
|
|
|||
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
gettime,settime Получает и устанавливает системное время |
||||||
|
|
|
|
|
|
||||
|
|
Назначение |
|
|
Получает и устанавливает системное время |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
Синтаксис |
|
|
#include<dos.h> |
|
|
|
|
|
|
|
|
|
void gettime(struct time *timep); |
|
|
||
|
|
|
|
|
void settime(struct time *timep); |
|
|
||
|
Замечания |
gettime |
заполняет структуру time, |
на которую указывает timep, значением |
|
текущего системного времени.
settime устанавливает значение системного времени в соответствии с содержимым структуры time, на которую указывает timep.
Структура time определяется следующим образом:
struct time { |
|
|
|
|
|
unsigned char |
ti_min; |
/* |
минуты |
*/ |
|
unsigned char |
ti_hour; |
/* |
÷àñû |
*/ |
|
unsigned |
char |
ti_hund; /* сотые доли секунды */ |
|||
unsigned |
char |
ti_sec; |
/* |
секунды |
*/ |
1
ФУНКЦИИ ДЛя РАБОТЫ СО ВРЕМЕНЕМ И ДАТОЙ
};
Пример |
|
|
|
|
|
|
|
|
|
#include |
<stdio.h> |
|
|
|
|
|
|
||
#include |
<dos.h> |
|
|
|
|
|
|
||
int main(void){ |
|
|
|
|
|
|
|
||
|
struct time t; |
|
|
|
|
|
|
||
|
gettime(&t); |
|
|
|
|
|
|
|
|
|
printf("Текущая минута: |
%d\n", t.ti_min); |
|
|
|
||||
|
printf("Текущий час: |
%d\n", t.ti_hour); |
|
|
|
|
|||
|
printf("Текущая сотая секунды: %d\n", t.ti_hund); |
|
|
|
|||||
|
printf("Текущая секунда: |
%d\n", t.ti_sec); |
|
|
|
||||
|
/* увеличить на 1 счетчик минут и вызвать settime */ |
|
|
||||||
|
t.ti_min++; |
|
|
|
|
|
|
|
|
|
settime(&t); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
asctime |
Преобразует дату и время в формат ASCII |
|||||
|
|
|
|
|
|
||||
|
Назначение |
|
|
Преобразует дату и время в формат ASCII. |
|
||||
|
Синтаксис |
|
|
#include <time.h> |
|
|
|
|
|
|
|
|
|
char *asctime(const struct tm |
*tblock); |
|
|||
|
|
|
|
|
|
|
|
||
|
Замечания |
|
|
asctime преобразует |
время, |
хранимое в |
виде структуры в |
||
|
|
|
|
*tblock, в 26-символьную строку той же формы, что и строка в |
|||||
|
|
|
|
функции ctime: Sun Sep 16 01:03:52 1973\n\0 |
|||||
|
|
|
|
|
|
|
|||
|
Возвращаемое значение |
asctime возвращает |
указатель |
íà |
символьную строку, |
||||
|
|
|
|
содержащую дату и |
время. Эта строка является статической |
||||
|
|
|
|
переменной и меняет свое значение |
ïðè |
каждом обращении к |
|||
|
|
|
|
функции asctime. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <stdio.h> |
|
|
|
|
|
|
||
#include <string.h> |
|
|
|
|
|
|
|||
#include <time.h> |
|
|
|
|
|
|
|||
int main(void){ |
|
|
|
|
|
|
|
||
|
struct tm t; |
|
|
|
|
|
|
|
|
|
char str[80]; /* пример загрузки структуры tm */ |
|
|
|
|||||
|
t.tm_sec |
= |
1 |
/* |
секунды */ |
|
|
|
|
|
t.tm_min |
= |
30 |
/* |
минуты */ |
|
|
|
|
|
t.tm_hour |
= |
9 |
/* |
÷àñ */ |
|
|
|
|
|
t.tm_mday |
= |
22 |
/* |
день месяца */ |
|
|
|
|
|
t.tm_mon |
= |
11 |
/* |
месяц */ |
|
|
|
|
|
t.tm_year |
= |
56 |
/* |
год - не включая век */ |
|
|
||
|
t.tm_wday |
= |
4 |
/* |
день недели */ |
|
|
|
|
|
t.tm_yday |
= |
0 |
/* |
не отображается в asctime */ |
|
|
||
|
t.tm_isdst = |
0 |
/* |
Декретное время. Не отображается в asctime */ |
|||||
|
/* преобразует структуру в строку, оканчивающуюся null */ |
|
|
||||||
|
strcpy(str, asctime(&t)); |
|
|
|
|
|
|||
|
printf("%s\n", str); |
|
|
|
|
|
|
||
|
return 0; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
ctime |
Преобразует дату и время в строку |
|||||
|
|
|
|
|
|
||||
|
Назначение |
|
Преобразует дату и время в строку. |
|
|
|
|||
|
|
|
|
|
|
|
|
||
|
Синтаксис |
|
#include <time.h> |
|
|
|
|
||
|
|
|
char *ctime(const time_t *time); |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
2

ФУНКЦИИ ДЛя РАБОТЫ СО ВРЕМЕНЕМ И ДАТОЙ
|
Замечания |
Функция ctime преобразует время, на которое указывает параметр time (в |
|||
|
|
том виде, как оно возвращается функцией time), в 26-символьную строку - |
|||
|
|
заканчивающуюся символом новой строки и нулем - следующей формы: Mon Nov |
|||
|
|
21 |
11:31:54 |
1983\n\0 |
|
|
|
Все поля имеют постоянную ширину. |
|||
|
|
|
Глобальная переменная timezone типа long содержит разницу в |
||
|
|
секундах между GMT (время по Гринвичу) и местным стандартным временем (в |
|||
|
|
PST timezone равно 8x60x60). Глобальная переменная daylight отлична от |
|||
|
|
нуля тогда и только тогда, когда применяется стандартное преобразование |
|||
|
|
декретного времени США. |
|
||
|
|
||||
|
Возвращаемое |
ctime возвращает указатель на строку символов, содержащую дату и время. |
|
||
значение |
Эта строка находится в статической памяти и переписывается при каждом |
||||
|
|
вызове ctime. |
#include <stdio.h> #include <time.h> int main(void){
time_t t;
t = time(NULL);
printf("Сегодняшние дата и время: %s\n", ctime(&t)); return 0;
}
getdate, _dos_getdate, _dos_setdate, setdate Получает и устанавливает системную дату
Назначение |
Получает и устанавливает системную дату. |
||
Синтаксис |
#include<dos.h> |
|
|
|
void getdate(struct date *datep); |
|
|
|
void _dos_getdate(struct dosdate_t *datep); |
||
|
void setdate(struct date *datep); |
|
|
|
unsignes _dos_setdate(struct dosdate_t *datep); |
||
|
|
||
Замечания |
Функция getdate заносит в структуру date (на которую указывает datep) |
||
|
текущую системную дату. |
|
|
|
Функция setdate устанавливает системную дату (месяц, день и год) в |
||
|
значение, заложенное в структуре date с указателем datep. |
||
|
Структура date определяется следующим образом: |
||
|
struct date |
|
|
|
int da_year; |
/* текущий год |
*/ |
|
char da_day; |
/* день месяца |
*/ |
|
char da_mon; |
/* месяц (1 = Январь)*/ |
|
|
; |
|
|
|
Функция _dos_getdate заносит в структуру dosdate_t (c указателем datep) |
||
|
текущую системную дату. |
|
|
|
Структура dosdate_t |
определяется |
следующим |
|
образом: |
|
|
|
struct dosdate_t |
|
|
|
unsigned char day; |
/* 1-31 |
*/ |
|
unsigned char month; |
/* 1-12 |
*/ |
|
unsigned int year; |
/* 1980-2099 */ |
|
|
unsigned char dayofweek; |
|
|
|
/* 0-6 (0=Воскресенье) */ |
|
|
|
; |
|
|
|
|
|
|
Возвращаемое |
Функции _dos_getdate, |
getdate è |
setdate íå |
значение |
возвращают никаких значений. |
|
|
|
Если дата установлена успешно, то функция _dos_setdate возвращает 0. В |
||
|
противном случае она возвращает ненулевое значение и устанавливает |
||
|
глобальную переменную в EINVAL |
Недопустимое значение даты |
#include <dos.h> #include <process.h> #include <stdio.h> int main(void){
3

ФУНКЦИИ ДЛя РАБОТЫ СО ВРЕМЕНЕМ И ДАТОЙ
struct dosdate_t reset; reset.year = 2001; reset.day = 1 reset.month = 1;
printf("Установка даты в 1/1/2001.\n"); _dos_setdate(&reset); _dos_getdate(&reset);
printf("Новый год: %d\n", reset.year); printf("Новый день: %d\n", reset.day); printf("Новый месяц: %d\n", reset.month); return 0;
}
|
stime |
Устанавливает системные дату и время |
||
|
|
|
|
|
|
Назначение |
Устанавливает системные дату и время |
|
|
|
|
|
|
|
|
Синтаксис |
#include<time.h> |
|
|
|
|
int stime(time_t *tp); |
|
|
|
|
|
|
|
|
Замечания |
stime устанавливает системные время и дату. |
Tp указывает на значение |
|
|
|
времени, измеренное в секундах от : 00:00:00 GMI, January1,1970. |
||
|
Возвращаемое |
возвращает значение 0. |
|
|
|
значение |
|
|
|
|
|
|
|
|
Пример |
|
|
|
|
|
#include <stdio.h> |
|
|
|
|
#include <time.h> |
|
|
|
|
int main(void) |
|
|
|
{ |
|
|
|
|
|
time_t t; |
|
|
|
|
t = time(NULL); |
|
|
|
|
printf("текущая дата %s", ctime(&t)); |
|
||
|
t -= 24L*60L*60L; |
|
|
|
|
stime(&t); |
|
|
|
|
printf("Новая дата %s", ctime(&t)); |
|
||
|
return 0; |
|
|
|
} |
|
|
|
|
|
time |
Получает время дня |
|
|
|
|
|
|
|
|
|
|
|
|
|
Назначение |
Получает время дня |
|
|
|
|
|
|
|
|
Синтаксис |
#include <time.h> |
|
|
|
|
time_t time(time_t *timer); |
|
|
|
|
|
||
|
Замечания |
time выдает текущее время в секундах, отсчитываемое с 00:00:00 GMT (по |
||
|
|
Гринвичу) 1 января 1970 года и сохраняет |
это значение в ячейке, на |
|
|
|
которую указывает |
timer (timer становится |
ненулевым указателем). |
|
Возвращаемое |
time возвращает |
время, отсчитанное к моменту вызова функции, как |
|
|
значение |
описано. |
|
|
|
|
|
|
|
Пример
#include <time.h> #include <stdio.h> #include <dos.h>
int main(void)
{
time_t t;
t = time(NULL);
printf("Число секунд после 1 января 1970 равно %ld",t); return 0; }
4