Читаем Основы программирования в Linux полностью

Выполните упражнение 4.7.

Упражнение 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 для получения машинного представления значения времени и затем вызывает функцию gmtime для преобразования его в структуру с удобными для восприятия значениями времени и даты. Она выводит на экран полученные значения с помощью функции printf. Строго говоря, выводить необработанное значение времени таким способом не следует, потому что наличие типа длинного целого не гарантировано во всех системах. Если сразу же после вызова функции gmtime выполнить команду date, можно сравнить оба вывода.

Но здесь у вас возникнет небольшая проблема. Если вы запустите эту программу в часовом поясе, отличном от Greenwich Mean Time (время по Гринвичу) или у вас действует летнее время, как у нас, вы заметите, что время (и, возможно, дата) неправильное. Все дело в том, что функция gmtime возвращает время по Гринвичу (теперь называемое Universal Coordinated Time (всеобщее скоординированное время) или UTC). Системы Linux и UNIX поступают так для синхронизации всех программ и систем в мире. Файлы, созданные в один и тот же момент в разных часовых поясах, будут отображаться с одинаковым временем создания. Для того чтобы посмотреть местное время, следует применять функцию localtime.

#include

struct tm *localtime(const time_t *timeval);

Функция localtime идентична функции gmtime за исключением того, что она возвращает структуру, содержащую значения с поправками на местный часовой пояс и действующее летнее время. Если вы выполните программу gmtime, но замените все вызовы функции gmtime на вызовы localtime, в отчете программы вы увидите правильные время и дату.

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

#include

time_t mktime(struct tm *timeptr);

Функция mktime вернет -1, если структура не может быть представлена как значение типа 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.

Упражнение 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 выполнить всю тяжелую работу по преобразованию этого значения в удобочитаемую строку, которую потом и выводит на экран.

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

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

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети / Книги по IT