Выполните упражнение 4.7.
gmtimeДалее приведена программа gmtime.с, выводящая текущие время и дату с помощью структуры tm
gmtime.#include
#include
#include
int main {
struct tm *tm_ptr;
time_t the_time;
(void)time(&the_time);
tm_ptr = gmtime(&the_time);
printf("Raw time is %ld\n", the_time);
printf("gmtime gives:\n");
printf("date: %02d/%02d/%02d\n",
tm_ptr->tm_year, tm_ptr->tm_mon+1, tm_ptr->tm_mday);
printf("time: %02d:%02d:%02d\n",
tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec);
exit(0);
}
Выполнив эту программу, вы получите хорошее соответствие текущим времени и дате:
$ ./gmtime; date
Raw time is 1179644196
gmtime gives:
date: 107/05/20
time: 06:56:36
Sun May 20 07:56:37 BST 2007
Как это работает
Программа вызывает функцию time
printf. Строго говоря, выводить необработанное значение времени таким способом не следует, потому что наличие типа длинного целого не гарантировано во всех системах. Если сразу же после вызова функции gmtime выполнить команду date, можно сравнить оба вывода.Но здесь у вас возникнет небольшая проблема. Если вы запустите эту программу в часовом поясе, отличном от Greenwich Mean Time (время по Гринвичу) или у вас действует летнее время, как у нас, вы заметите, что время (и, возможно, дата) неправильное. Все дело в том, что функция gmtime
localtime.#include
struct tm *localtime(const time_t *timeval);
Функция localtime
gmtime за исключением того, что она возвращает структуру, содержащую значения с поправками на местный часовой пояс и действующее летнее время. Если вы выполните программу gmtime, но замените все вызовы функции gmtime на вызовы localtime, в отчете программы вы увидите правильные время и дату.Для преобразования разделенной на элементы структуры tm в общее внутреннее значение времени можно применить функцию mktime
#include
time_t mktime(struct tm *timeptr);
Функция mktime
time_t.Для вывода программой date
asctime и ctime:#include
char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timeval);
Функция asctime
tm-структурой timeptr. У возвращаемой строки формат, подобный приведенному далее:Sun Jun 9 12:34:56 2007\n\0
У нее всегда фиксированный формат длиной 26 символов. Функция ctime
asctime(localtime(timeval))
Она принимает необработанное машинное значение времени и преобразует его в местное время.
А теперь выполните упражнение 4.8.
ctimeВ этом примере благодаря приведенному далее программному коду вы увидите функцию ctime
#include
#include
#include
int main {
time_t timeval;
(void)time(&timeval);
printf ("The date is: %s", ctime(&timeval));
exit(0);
}
Откомпилируйте и затем запустите на выполнение ctime.c, и вы увидите нечто похожее на приведенные далее строки:
$ ./ctime
The date is: Sat Jun 9 08:02:08 2007.
Как это работает
Программа ctime.c вызывает функцию time
ctime выполнить всю тяжелую работу по преобразованию этого значения в удобочитаемую строку, которую потом и выводит на экран.