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

Стандарт POSIX указывает, что ctime(), localtime(), mktime() и strftime() действуют, «как если бы» они вызывали tzset(). Это означает, что им в действительности не нужно вызывать tzset(), но они должны вести себя, как если бы эта функция была вызвана. (Формулировка призвана дать определенную гибкость при реализации, в то же время гарантируя правильное поведение кода уровня пользователя.)

На практике это означает, что вы сами почти никогда не будете вызывать tzset(). Но если понадобится, эта функция есть.

<p>6.1.5.1. Системы BSD: <code>timezone()</code>, не <code>timezone</code></p>

Некоторые производные от BSD 4.4 системы вместо переменной POSIX timezone предоставляют функцию timezone():

#include /* BSD */

char *timezone(int zone, int dst);

Аргумент zone является числом минут западнее GMT, a dst истинно, если действует летнее время. Возвращаемое значение является строкой, дающей имя указанного часового пояса, или значение, выраженное относительно GMT. Эта функция обеспечивает совместимость с функцией V7 с тем же именем и поведением.

Локальное время: откуда оно известно?

Системы GNU/Linux хранят информацию о часовых поясах в файлах и каталогах в /usr/share/zoneinfo:

$ cd /usr/share/zoneinfo

$ ls -FC

Africa/     Canada/ Factory    Iceland   MST7MDT  Portugal  W-SU

America/    Chile/  GB         Indian/   Mexico/  ROC       WET

Antarctica/ Cuba    GB-Eire    Iran      Mideast/ ROK       Zulu

Arctic/     EET     GMT        Israel    NZ       Singapore iso3166.tab

Asia/       EST     GMT+0      Jamaica   NZ-CHAT  SystemV/  posix/

Atlantic/   EST5EDT GMT-0      Japan     Navajo   Turkey    posixrules

Australia/  Egypt   GMT0       Kwajalein PRC      UCT       right/

Brazil/     Eire    Greenwich  Libya     PST8PDT  US/       zone.tab

CET         Etc/    HST        MET       Pacific/ UTC

CST6CDT     Europe/ Hongkong   MST       Poland   Universal

Когда возможно, этот каталог использует прямые ссылки для предоставления одних и тех же данных с разными именами. Например, файлы EST5EDT и US/Eastern на самом деле одни и те же:

$ ls -il EST5EDT US/Eastern

724350 -rw-r--r-- 5 root root 1267 Sep б 2002 EST5EDT

724350 -rw-r--r-- 5 root root 1267 Sep 6 2002 US/Eastern

Частью установки системы является выбор часового пояса. Надлежащий файл данных часового пояса помещается затем в /etc/localtime:

$ file /etc/localtime

/etc/localtime: timezone data

На нашей системе это автономная копия файла для нашего часового пояса. На других системах это может быть символическая ссылка на файл в /usr/share/zoneinfo. Преимуществом использования отдельной копии является то, что все по-прежнему работает, если /usr не смонтирован.

Переменная окружения TZ, если она установлена, перекрывает значение по умолчанию для часового пояса:

$ date /* Дата и время в часовом поясе по умолчанию

        */

Wed Nov 19 06:44:50 EST 2003

$ export TZ=PST8PDT /* Смена часового пояса на Западное

                       побережье США */

$ date /* Вывести дату и время */

Wed Nov 19 03:45:09 PST 2003

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

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

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных