Содержание | Глава 16

Функция strftime

#include <time.h> 
size_t strftime(char *str, size_t maxsize, const char *fmt,
                const struct tm *time);

Функция strftime() помещает информацию о времени и дате (вместе с другой информацией) в строку, адресуемую параметром str, в соответствии с командами форматирования, которые содержатся в адресуемой параметром fmt строке. Эта функция использует разделенное на компоненты время, на которое указывает указатель time. В строку str будет помещено не более maxsize символов.

В версии С99 к параметрам str, fmt и time применен квалификатор restrict.

Работа функции strftime() напоминает работу функции sprintf() в том, что она распознает набор команд форматирования, которые начинаются со знака процента (%), и помещает отформатированный результат в строку. Команды форматирования используются для задания точного способа представления различных данных времени и даты в параметре str. Любые другие символы, содержащиеся в строке форматирования, помещаются в строку str без изменений. Время и дата отображаются по местному времени. Команды форматирования перечислены в следующей таблице. Обратите внимание на то, что во многих командах прописные и строчные буквы имеют различную интерпретацию.

Функция strftime() возвращает количество символов, помещенных в строку, адресуемую параметром str, или нуль при возникновении ошибки.
КодЗамещается
%aСокращенное название дня недели
%AПолное название дня недели
%bСокращенное название месяца
%BПолное название месяца
%cСтандартная строка даты и времени
%CДве последние цифры года
%dДень месяца в виде десятичного числа (1-31)
%DДата в виде месяц/день/год (добавлено в версии С99)
%eДень месяца в виде десятичного числа (1-31) в двух-символьном поле (добавлено в С99)
%FДата в виде "год-месяц-день" (добавлено в С99)
%gПоследние две цифры года с использованием понедельного года (добавлено в С99)
%GГод с использованием понедельного года (добавлено в С99)
%hСокращенное название месяца (добавлено в С99)
Час (0-23)
%jЧас (1-12)
%jДень года в виде десятичного числа (1-366)
%mМесяц в виде десятичного числа (1-12)
%MМинуты в виде десятичного числа (0-59)
%nРазделитель строк (добавлено в С99)
%pМестный эквивалент AM (до полудня) или РМ (после полудня)
%r12-часовое время (добавлено в С99)
%RВремя в виде чч:мм (добавлено в С99)
%SСекунды в виде десятичного числа (0-60)
%TГоризонтальная табуляция (добавлено в С99)
%TВремя в виде чч:мм:сс (добавлено в С99)
%uДень недели; понедельник — первый день недели (0-6) (добавлено в С99)
%UНеделя года; воскресенье — первый день недели (0-53)
%VНеделя года с использованием понедельного года (добавлено в С99)
%wДень недели в виде десятичного числа (0-6, воскресенье — 0-й день)
%WНеделя года; понедельник — первый день недели (0-53)
%xСтандартная строка даты
%XСтандартная строка времени
%yГод в виде десятичного числа без столетия (0-99)
%YГод в вуде десятичного числа, включающего столетие
%zСдвиг относительно координированного всемирного (UTC) времени (добавлено в С99)
%ZНазвание часового пояса
%%Знак процента

Версия С99 позволяет использовать в функции strftime() определенные команды форматирования с модификаторами Е и O. Модификатор Е может модифицировать такие команды, как с, C, х, X, у, Y, d, e и H. Модификатор O может модифицировать команды: I, m, M, S, u, U, V, w, W и y. Использование этих модификаторов приводит к альтернативному представлению отображаемого времени и/или даты. За подробностями обращайтесь к документации, поставляемой вместе с используемым вами компилятором.

Понедельный год используется командами форматирования %g, %G и %V. При таком представлении первым днем недели является понедельник, а первая неделя года должна включать день с датой "4 января".

Пример

Предположим, что ltime указывает на структуру, которая содержит 10:00:00 AM. Следующая программа печатает: "Сейчас 10 AM.":

#include <time.h>
#include <stdio.h>

int main(void)
{
  struct tm *ptr;
  time_t lt;
  char str[80];

  lt = time(NULL);
  ptr = localtime(<);

  strftime(str, 100, "Сейчас %H %p.", ptr);
  printf(str);

  return 0;
}

Зависимые функции

time() localtime() gmtime()
Содержание | Глава 16