Читаем Linux API. Исчерпывающее руководство полностью

Аргумент format, используемый при вызове strftime(), представляет собой строку по типу той, что задается в функции printf(). Последовательности, начинающиеся с символа процента (%), являются спецификаторами преобразования, которые заменяются различными компонентами даты и времени в соответствии с символом, следующим за символом процента. Предусмотрен довольно обширный выбор спецификаторов преобразования, часть компонентов которого перечислена в табл. 10.1. (Полный перечень можно найти на странице руководства strftime(3).) За исключением особо оговариваемых, все эти спецификаторы преобразования стандартизированы в SUSv3.

Спецификаторы %U и %W выводят номер недели в году. Номера недель, выводимые с помощью %U, исчисляются из расчета, что первая неделя, начиная с воскресенья, получает номер 1, а предшествующая ей неполная неделя получает номер 0. Если воскресенье приходится на первый день года, то неделя с номером 0 отсутствует и последний день года приходится на неделю под номером 53. Нумерация недель, выводимых с помощью %W, работает точно так же, но вместо воскресенья в расчет берется понедельник.

Зачастую в книге нам придется выводить текущее время в различных демонстрационных программах. Для этого мы предоставляем функцию currTime(), которая возвращает строку с текущим временем, отформатированным функцией strftime() при заданном аргументе format.

#include "curr_time.h"

char *currTime(const char *format);

Возвращает при успешном завершении указатель на статически размещенную строку или NULL при ошибке

Реализация функции currTime() показана в листинге 10.2.

Таблица 10.1. Отдельные спецификаторы преобразования для strftime()

Спецификатор — Описание — Пример

%% — Символ % — %

%a — Сокращенное название дня недели — Tue

%A — Полное название дня недели — Tuesday

%b, %h — Сокращенное название месяца — Feb

%B — Полное название месяца — February

%c — Дата и время — Tue Feb 1 21:39:46 2011

%d — День месяца (две цифры, от 01 до 31) — 01

%D — Дата в американском формате (то же самое, что и %m/%d/%y) — 02/01/11

%e — День месяца (два символа) — _1

%F — Дата в формате ISO (то же самое, что и %Y-%m-%d) — 2011-02-01

%H — Час (24-часовой формат, две цифры) — 21

%I — Час (12-часовой формат, две цифры) — 09

%j — День года (три цифры, от 001 до 366) — 032

%m — Месяц в виде десятичного числа (две цифры, от 01 до 12) — 02

%M — Минута (две цифры) — 39

%p — AM/PM (до полудня/после полудня) — PM

%P — am/pm (GNU-расширение) — pm

%R — Время в 24-часовом формате (то же самое, что и %H:%M) — 21:39

%S — Секунда (от 00 до 60) — 46

%T — Время (то же самое, что и %H:%M:%S) — 21:39:46

%u — Номер дня недели (от 1 до 7, Понедельник = 1) — 2

%U — Номер недели, начинающейся с воскресенья (от 00 до 53) — 05

%w — Номер дня недели (от 0 до 6, воскресенье = 0) — 2

%W — Номер недели, начинающейся с понедельника (от 00 до 53) — 05

%x — Дата (локализированная версия) — 02/01/11

%X — Время (локализированная версия) — 21:39:46

%y — Последние две цифры года — 11

%Y — Год в формате четырех цифр — 2011

%Z — Название часового пояса — CET

Листинг 10.2. Функция, возвращающая строку с текущим временем

time/curr_time.c

#include

#include "curr_time.h" /* Объявление определяемых здесь функций */

#define BUF_SIZE 1000

/* Возвращает строку, содержащую текущее время, отформатированное в сооответствии

со спецификацией в 'format' (спецификаторы на странице руководства strftime(3)).

Если 'format' имеет значение NULL, в качестве спецификатора мы используем "%c"

(что дает дату и время, как для ctime(3), но без завершающего символа новой строки).

При ошибке возвращается NULL. */

char *

currTime(const char *format)

{

static char buf[BUF_SIZE]; /* Нереентерабельная */

time_t t;

size_t s;

struct tm *tm;

t = time(NULL);

tm = localtime(&t);

if (tm == NULL)

return NULL;

s = strftime(buf, BUF_SIZE, (format!= NULL)? format: "%c", tm);

return (s == 0)? NULL: buf;

}

time/curr_time.c

Преобразование из печатного вида в разделенное календарное время

Функция strptime() выполняет преобразование, обратное тому, которое делает функция strftime(). Она преобразует строку в виде даты и времени в разделенное календарное время (время, разбитое на компоненты).

#define _XOPEN_SOURCE

#include

char *strptime(const char *str, const char *format, struct tm *timeptr);

Возвращает при успешном завершении указатель на следующий необработанный символ в str или NULL при ошибке

Функция strptime() использует спецификацию, заданную в аргументе format, для разбора строки в формате «дата плюс время», указанной в аргументе str. Затем она помещает результат преобразования в разделенное календарное время в структуру, на которую указывает аргумент timeptr.

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
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

Стивен Прата

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