Разработка приложений в среде 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-го года".
Поделиться:
Популярные книги
На границе империй. Том 9. Часть 5
18. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Не грози Дубровскому! Том IX
9. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
(Противо)показаны друг другу
Любовные романы:
современные любовные романы
эро литература
5.25
рейтинг книги
Партиец
2. Переломный век
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Метаморфозы Катрин
Фантастика:
фэнтези
8.26
рейтинг книги
Измена. Истинная генерала драконов
1. Измены по-драконьи
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Чужая дочь
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Странник
4. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сводный гад
2. Самбисты
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Возвышение Меркурия. Книга 15
15. Меркурий
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Муж на сдачу
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Диверсант
2. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
(Не)нужная жена дракона
5. Хроники Драконьей империи
Любовные романы:
любовно-фантастические романы
6.89
рейтинг книги
Тринадцатый II
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00