strftime()

Преобразовать время в форматированную строку

Прототип:

#include <time.h>
size_t strftime( char *s,
size_t maxsize,
const char *format,
const struct tm *timeptr );

Аргументы:

s
Указатель на буфер, в котором функция сохранит время в заданном формате.
maxsize
Максимальный размер буфера.
format
Формат времени. См. раздел “Форматы” ниже.
timeptr
Указатель на структуру типа struct tm, содержащую время для форматированного преобразования.

Библиотека:

libc

Описание:

Функция strftime() преобразует время, указанное в параметре timeptr, в массив (строку) s в соответствии с форматом format.

Форматы

Строка format состоит из нуля или более директив и обычных символов. Директива состоит из символа a %, за которым следует символ, определяющий производимую подстановку. Все обычные символы копируются в массив без изменений. В массив помещается не более чем maxsize символов.

Информация о местном часовом поясе используется так же как при вызове tzset().

%a
Сокращенное региональное название дня недели.
%A
Полное региональное название дня недели.
%b
Сокращенное региональное название месяца.
%B
Полное региональное название месяца.
%c
Региональное представление даты и времени.
%d
День месяца в виде десятичного числа (01-31).
%D
Дата в формате mm/dd/yy.
%e
День месяца в виде десятичного числа (1-31); перед однозначными числами ставится пробел.
%F
Формат даты по стандарту ISO; эквивалентно Y-m-d.
%g
Последние две цифры года (week-based) в виде десятичного числа (00-99).
%G
Год (week-based) в виде десятичного числа (например, 1998).
%h
Сокращенное региональное название месяца.
%H
Час (24-часовые часы) в виде десятичного числа (00-23).
%I
Час (12-часовые часы) в виде десятичного числа (01-12).
%j
День года в виде десятичного числа (001-366)..
%m
Месяц в виде десятичного числа (01-12).
%M
Минута в виде десятичного числа (00-59).
%n
Символ новой строки.
%p
Региональный эквивалент AM или PM.
%r
12-часовое время (01-12) с использованием обозначения AM / PM в формате HH:ММ:SS (AM|PM).
%R
24-часовая запись %H: %M.
%S
Секунда в виде десятичного числа (00-59).
%t
Символ табуляции.
%T
24-часовое время в формате HH:ММ:SS.
%u
Неделя в виде десятичного числа (1-7), где понедельник это 1.
%U
Номер недели года в виде десятичного числа (00-52), где воскресенье - первый день недели.
%V
Номер недели года в виде десятичного числа (01-53), где понедельник - первый день недели. Неделя, включающая 1 января, относится к новому году, если в новом году прошло четыре или более дней недели, иначе это последняя неделя предыдущего года.
%w
День недели в виде десятичного числа (0-6), где 0 - воскресенье.
%W
Номер недели года в виде десятичного числа (00-52), где понедельник - первый день недели.
%x
Региональное представление даты.
%X
Региональное представление времени.
%y
Year without century, as a decimal number (00-99).
%Y
Год без столетия в виде десятичного числа (00-99).
%z
Смещение от UTC -0430 (4 часа, 30 минут после UTC, к западу от Гринвича), а если часовой пояс не указан, то символов нет.
%Z
Имя часового пояса, а если часовой пояс не указан, то символов нет.
%%
Символ %.

Некоторые из приведенных выше спецификаторов преобразования могут быть изменены с помощью префикса E или O. Если для регионального стандарта не существует альтернативных форматов, они ведут себя так, как если бы были вызваны неизмененные спецификаторы преобразования::

%Ec
Альтернативное представление даты и времени.
%EC
Альтернативное название базового года (периода).
%Ex
Альтернативное представление даты.
%EX
Альтернативное представление времени.
%Ey
Смещение от %EC только для представления альтернативного года
%EY
Альтернативное представление года.
%Od
День месяца с использованием альтернативных цифровых символов. Начальные нули добавляются, если существует альтернативный символ для нуля, в противном случае используются начальные пробелы.
%Oe
День месяца с использованием альтернативных цифровых символов. Используются ведущие пробелы.
%OH
24-часовые часы с использованием альтернативных цифровых символов.
%OI
12-часовые часы с использованием альтернативных цифровых символов.
%Om
Месяц с использованием альтернативных цифровых символов.
%OM
Минуты с использованием альтернативных цифровых символов.
%OS
Секунды с использованием альтернативных цифровых символов.
%Ou
Альтернативное представление номера дня недели (понедельник = 1).
%OU
Альтернативное представление номера дня недели (правила соответствуют %U).
%OV
Альтернативное представление номера недели. (Правила соответствуют %V).
%Ow
День недели в виде числа с использованием альтернативных числовых символов (воскресенье = 0).
%OW
Номер недели года с использованием альтернативных цифровых символов (понедельник - первый день недели).
%Oy
Смещение в году от %C с использованием альтернативных цифровых символов.

Возвращаемое значение:

Количество символов, помещенных в массив, не включая завершающий нулевой символ, или 0. Если количество символов превышает число maxsize, то содержимое строки не определено.

Если возникает ошибка функция записывает ее код в errno.

Примеры:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( void )
{
time_t time_of_day;
char buffer[ 80 ];
time_of_day = time( NULL );
strftime( buffer, 80, "Today is %A %B %d, %Y",
localtime( &time_of_day ) );
printf( "%s\n", buffer );
return (EXIT_SUCCESS);
}

Код генерирует следующий вывод:

$ ./a.out Today is Thursday February 25, 1999

Классификация:

ANSI, POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

asctime(), asctime_r(), ctime(), ctime_r(), sprintf(), struct tm, tzset(), wcsftime()




Предыдущий раздел: Описание API системной библиотеки