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

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

Жанры

Linux программирование в примерах

Роббинс Арнольд

Шрифт:

Рис. 6.1. Возвращаемая функциями

ctime
и
asctime
строка

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

printf
простую форматирующую строку "
%s
", а не "
%s\n
", как можно было бы ожидать.

ctime
устраняет
необходимость шага вызова
localtime
; в сущности, это эквивалентно

time_t now;

char *curtime;

time(&now);

curtime = asctime(localtime(&now));

6.1.3.2. Сложное форматирование времени:

strftime

Хотя часто достаточно использования

asctime
и
ctime
, у них есть также и ограничения:

• Формат вывода фиксирован. Нет способа изменить порядок элементов.

• В вывод не включаются сведения о часовом поясе.

• В выводе используются сокращенные названия месяца и дня.

• В выводе используются английские названия месяцев и дней.

По этим причинам C89 ввело стандартную библиотечную процедуру

strftime
:

#include <time.h> /* ISO С */

size_t strftime(char *s, size_t max, const char *format,

 const struct tm *tm);

strftime
сходна с
sprintf
. Ее аргументы следующие:

char *s

Буфер для форматированной строки.

size_t max

Размер буфера.

const char *format

Форматирующая строка.

const struct tm *tm

Указатель на

struct tm
, представляющий разложенное время, которое надо отформатировать.

Форматирующая строка содержит символы букв, смешанные о описателями преобразования, указывающими, что должно быть помещено в строку, такими, как полное имя дня недели, час в соответствии с 24-часовым или 12-часовым циклом, наличие указателей am или p.m [64] , и т.д. (Вскоре будут приведены примеры.)

64

a.m. — от ante meridiem (до полудня), p.m. — от post meridiem (пополудни), американская система обозначения 12-часового цикла времени суток. — Примеч. перев.

Если всю строку можно отформатировать с использованием не более

max
символов, возвращаемое значение представляет собой число символов, помещенных в
s
, не включая завершающий нулевой байт. В противном случае, возвращаемое значение ноль. В последнем случае содержание
s
«неопределенно». Следующий простой пример дает представление об использовании
strftime
:

#include <stdio.h>

#include <time.h>

int main(void) {

 char buf[100];

 time_t now;

 struct tm *curtime;

 time(&now);

 curtime = localtime(&now);

 (void)strftime(buf, sizeof buf,

"It is now %A, %B %d, %Y, %I:%M %p", curtime);

 printf("%s\n", buf);

 exit(0);

}

После

запуска эта программа выводит что-то типа:

It is now Thursday, May 22, 2003, 04:15 PM

В табл. 6.2 предоставлен полный список описателей преобразования, их возможные альтернативные представления и их значения. Вдобавок стандарт C99 добавил к списку дополнительные описатели; новые для C99 описатели помечены символом √.

Таблица 6.2. Описатели преобразования формата

strftime

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

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Мастер Трав III

Мордорский Ваня
3. Мастер Трав
Фантастика:
фэнтези
рпг
фантастика: прочее
попаданцы
5.75
рейтинг книги
Мастер Трав III

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

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

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

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Страж Кодекса. Книга VI

Романов Илья Николаевич
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VI

Перешагнуть пропасть

Муравьёв Константин Николаевич
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Перешагнуть пропасть

Наномашины, Кошмар Академии! Том 10

Новиков Николай Васильевич
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Наномашины, Кошмар Академии! Том 10

Ким

Киплинг Редьярд Джозеф
Приключения:
исторические приключения
7.62
рейтинг книги
Ким

Его звали Тони. Книга 5

Кронос Александр
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Его звали Тони. Книга 5

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V
Описатель C99 Значение
%a
Локальное сокращенное название дня недели.
%A
Локальное полное название дня недели.
%b
Локальное сокращенное название месяца.
%B
Локальное полное название месяца.
%c, %Ec
Локальное «подходящее» представление даты и времени
%C, %EC
Век (00–99)
%d, %Od
День месяца (01–31)
%D
То же, что
%m/%d/%y
%e, %Oe
День месяца. Одна цифра дополняется пробелом (1–31).
%F
То же, что и
%Y-%m-%d
(формат даты ISO 8601)
%g
Две последние цифры, основанной на неделе года (00–99).
%G
Основанный на неделе год ISO 8601
%h
То же, что и
%b
%H, %OH
Час в 24-часовом цикле (00–23)
%I, %OI
Час в 12-часовом цикле (01–12)
%j
День года (001–366)
%m, %Om
Месяц в виде числа (01–12).
%M, %OM
Минута в виде числа (00–59)
%n
Символ конца строки ('
\n
')