Чтение онлайн

на главную - закладки

Жанры

Разработка приложений в среде Linux. Второе издание

Троан Эрик В.

Шрифт:

struct tm * gmtime(const time_t *t)

Сокращенная форма времени по Гринвичу; функция

gmtime
преобразует значение
time_t
в
struct tm
, которое выражает данное время в UTC.

struct tm * localtime(const time_t *t)

localtime
ведет себя подобно
gmtime
за исключением того, что создается объект
struct tm
, выраженный в показателях местного времени. Местное время определяется для всей системы путем установки файлов часовых поясов. Его можно переопределить с помощью переменной окружения
TZ
для пользователей, работающих в часовом поясе, отличном от того, в котором находится компьютер.

time_t mktime(struct tm *tp);

mktime
преобразует
struct tm
в
time_t
, предполагая, что
struct tm
выражается в показателях местного времени.

time_t timegm(struct tm *tp);

timegm
ведет себя подобно
mktime
за исключением предположения о том, что
struct tm
выражается в показателях UTC. Данная функция не является стандартной.

double difftime(time_t time1, time_t time0);

difftime
возвращает число с плавающей запятой, представляющее разность во времени в секундах между двумя значениями
time_t
. Хотя
time_t
гарантированно принадлежит к арифметическому типу, единица измерения не определяется в ANSI/ISO С;
difftime
возвращает разность в секундах в зависимости от единиц измерения
time_t
.

Еще четыре функции применяются для преобразований времени из чисел, которые обрабатывает компьютер, в текстовые представления, удобные для человека. Последняя функция не входит в число стандартных вопреки своей очевидной всеобщей полезности.

char *asctime(struct tm *tp);

char *ctime(time_t *t);

asctime
и
ctime
служат для преобразования временных значений в стандартную строку даты Unix, которая выглядит примерно так:

Tue Jun 17 23:17:29 1997

В обоих случаях длина сроки равна 26 символам и включает в себя завершающие символы новой строки и

'\0'
.

Не во всех локалях длина строки обязательно равна 26 символам, как в стандартной локали С.

ctime
выражает указанную дату в местном времени;
asctime
— в том часовом поясе, который указан в
struct tm
. Если последний объект был создан с помощью
gmtime
, то в показателях UTC, если при помощи
localtime
, то по местному времени.

size_t strftime (char *s, size_t max, char *fmt, struct tm *tp);

strftime
работает также как
sprintf
для времени. Она форматирует
struct tm
в соответствии с форматом
fmt
и размещает результат в не более чем
max
байтах (включая завершающий символ
'\0'
) строки
s
.

Подобно

sprintf
, функция
strftime
использует символ
%
для ввода управляющих последовательностей, в которые подставляются данные. Все подстановочные строки выражаются в показателях текущей локали. Однако сами управляющие последовательности являются совершенно разными. В некоторых случаях строчные буквы применяются для аббревиатур, а заглавные буквы — для полных имен. В отличие от
sprintf
, здесь отсутствует опция употребления чисел в середине управляющей последовательности для ограничения длины подстановочной строки; выражение
%.6А
недопустимо. По аналогии с функцией
sprintf
,
strftime
возвращает количество символов, выведенных в буфер
s
. Равенство данной величины значению
max
означает, что объем буфера недостаточен для текущей локали; необходимо выделить больший буфер и попытаться снова.

strftime
использует те же самые подстановки, что и программа работы с датами. Ниже приводятся определения для подстановок в стандартной локали, они служат для того, чтобы помочь вам идентифицировать тип информации. В остальных локалях они могут отличаться.

Трехбуквенная аббревиатура для названия дня недели.
Полное название дня недели.
%b
Трехбуквенная аббревиатура для названия месяца.
Полное название месяца.
Предпочтительное локальное выражение даты и времени (такое как возвращают функции
ctime
и
asctime
).
%d
День месяца в числовом виде (отсчет ведется от нуля).
Час дня по 24-часовому времени (отсчет ведется от нуля).
%I
Час дня по 12-часовому времени (отсчет ведется от нуля).
%j
День года (отсчет ведется от единицы).
%m
Месяц года (отсчет ведется от единицы).
Минута в часе (отсчет ведется от нуля).
%p
Соответствующая строка для локального эквивалента выражений AM или PM.
%S
Секунда
в минуте (отсчет ведется от нуля).
%U
Неделя года в числовом виде (первая неделя начинается с первого воскресенья года).
%W
Неделя года в числовом виде (первая неделя начинается с первого понедельника года).
%w
День недели в числовом виде (отсчет ведется с нуля).
%x
Предпочтительное локальное выражение только для даты, без времени.
%X
Предпочтительное локальное выражение только для времени, без даты.
%y
Двухзначное представление года (без столетия). Не рекомендуется использовать такой формат — это потенциальный источник "проблемы 2000-го года".
%Y
Полное четырехзначное числовое представление года.
%Z
Название стандартной аббревиатуры часовой зоны.
%%
Буквенный символ
%
.

char *strptime(char *s, char *fmt, struct tm *tp);

Как и

scanf
, функция
strptime
преобразует строку в разобранный формат. Она пытается быть либеральной при интерпретации введенной строки
s
в соответствии с форматирующей строкой
fmt
. Она принимает те же самые управляющие последовательности, что и
strftime
, при этом для каждого типа ввода она допускает как аббревиатуры, так и полные имена. Она не различает символы верхнего и нижнего и регистра, а также не распознает
%U
и
%W
.

Функция

strptime
предусматривает несколько дополнительных управляющих последовательностей; также она интерпретирует несколько последовательностей иначе (не так, как
strftime
). В последующем списке перечислены только те управляющие последовательности, которые отличаются значительно (другими словами, выходят за рамки тех изменений, на которые мы уже указывали). Числа могут предваряться нулями, но это не обязательно.

%h
Эквивалент
%b
и
%B
.
Считывает дату и время так, как печатает функция
strftime
с форматирующей строкой
%x %X
.
Считывает дату и время так, как печатает функция
strftime
с форматирующей строкой
.
%e
Эквивалент
%d
.
%D
Считывает дату так, как печатает функция
strftime
с форматирующей строкой
%m/%d/%y
.
%k
Эквивалент
.
%l
Эквивалент
%I
.
%r
Считывает время так, как печатает функция
strftime(
) с форматирующей строкой
%I:%М:%S %p
.
%R
Считывает время так, как печатает функция
strftime
с форматирующей строкой
%Н:%М
.
%T
Считывает время так, как печатает функция
strftime
с форматирующей строкой
%Н:%М:%S
.
%y
Считывает год в пределах двадцатого столетия. Допустимы значения только от 0 до 99, поскольку к ним добавляется число 1900.
%Y
Считывает полный год. Применяйте, по возможности, этот формат вместо
для того, чтобы избежать "проблемы 2000-го года".

Функция

strptime
возвращает указатель на символ в
s
— символ, находящийся за последним прочитанным во время разбора.

Функция

strptime
, к сожалению, не определена ни в ANSI/ISO, ни в POSIX, что ограничивает ее переносимость.

18.1.3. Ограничения, связанные со временем

В 32-разрядных системах Linux, как и в большинстве систем Unix, переменная

time_t
является целым числом со знаком длиной 32 бита. Это означает, что в 10:14:07 вечера 18 января (четверг) 2038 года она переполнится. Поэтому время 10:14:08 вечера 18 января (четверг) 2038 года будет представлено как 3:45:52 вечера 13 декабря (пятница) 1901 года. Как видите, система Linux не проявляет "проблему 2000-го года" (поскольку используются собственные библиотеки времени), однако с ней связана "проблема 2038-го года".

Поделиться:
Популярные книги

Газлайтер. Том 18

Володин Григорий Григорьевич
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 18

Секретарь лорда Демона

Лунёва Мария
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Секретарь лорда Демона

Жатва душ. Остров мертвых

Сугралинов Данияр
Фантастика:
боевая фантастика
рпг
5.20
рейтинг книги
Жатва душ. Остров мертвых

Кодекс Крови. Книга ХII

Борзых М.
12. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Крови. Книга ХII

Протокол "Наследник"

Лисина Александра
1. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Протокол Наследник

Найденыш

Шмаков Алексей Семенович
2. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Найденыш

Служанка. Второй шанс для дракона

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Служанка. Второй шанс для дракона

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Имперский Курьер. Том 2

Бо Вова
2. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 2

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Наследница долины Рейн

Арниева Юлия
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Наследница долины Рейн

Демон

Парсиев Дмитрий
2. История одного эволюционера
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Демон

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом