strftime, wcsftime, _strftime_l, _wcsftime_l

Форматируют строку времени.

Синтаксис

size_t strftime(
   char *strDest,
   size_t maxsize,
   const char *format,
   const struct tm *timeptr
);
size_t _strftime_l(
   char *strDest,
   size_t maxsize,
   const char *format,
   const struct tm *timeptr,
   _locale_t locale
);
size_t wcsftime(
   wchar_t *strDest,
   size_t maxsize,
   const wchar_t *format,
   const struct tm *timeptr
);
size_t _wcsftime_l(
   wchar_t *strDest,
   size_t maxsize,
   const wchar_t *format,
   const struct tm *timeptr,
   _locale_t locale
);

Параметры

strDest
Выходная строка.

maxsize
Размер буфера strDest, измеренный в символах (char или wchar_t).

format
Строка управления форматом.

timeptr
Структура данных tm.

locale
Используемый языковой стандарт.

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

Функция strftime возвращает количество символов в strDest, а функция wcsftime возвращает соответствующее количество расширенных символов.

Если общее количество символов, включая NULL в конце строки, больше maxsize, функции strftime и wcsftime возвращают значение "0" и содержимое strDest не определено.

Число символов равно числу литеральных символов strDest в format, а также любым символам, которые могут быть добавлены в format коды форматирования. Завершающий значение NULL строки не учитывается в возвращаемом значении.

Замечания

Значение strftime времени и wcsftime функции форматируйте tm в timeptr соответствии с заданным format аргументом и сохраните результат в буфере strDest. В строку помещается не более maxsize символов. Описание полей в timeptr структуре см. в разделе asctime. wcsftime — это эквивалент функции strftime для расширенных символов; ее указывающий на строку аргумент указывает на строку из расширенных символов. В остальном эти функции ведут себя одинаково.

Эта функция проверяет свои параметры. Если strDest, formatили timeptr является пустым указателем или tm если структура данных, адресованная timeptr недопустимым (например, если она содержит значения вне диапазона для времени или даты), или format если строка содержит недопустимый код форматирования, вызывается обработчик недопустимых параметров, как описано в разделе "Проверка параметров". Если выполнение может быть продолжено, функция возвращает 0 и устанавливает errno в значение EINVAL.

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_tcsftime strftime strftime wcsftime

Аргумент format состоит из одного или нескольких кодов; как и для функции printf, коды форматирования начинаются знаком процента (%). Символы, которые не начинаются, % копируются без изменений strDest. Категория LC_TIME текущего языкового стандарта влияет на форматирование выходных данных функции strftime. (Дополнительные сведения см. в LC_TIMEразделе setlocale.) wcsftime Функции strftime используют текущий языковой стандарт. _wcsftime_l И _strftime_l версии этих функций идентичны, за исключением того, что они принимают языковой стандарт в качестве параметра и используют его вместо заданного языкового стандарта. Дополнительные сведения см. в разделе Locale.

Функции strftime поддерживают следующие коды форматирования:

Код Строка замены
%a Сокращенное имя дня недели в языковом стандарте
%A Полное имя дня недели в языковом стандарте
%b Сокращенное имя месяца в языковом стандарте
%B Полное имя месяца в языковом стандарте
%c Представление даты и времени, соответствующее языковому стандарту
%C Год разделен на 100 и усечен на целое число, как десятичное число (00–99)
%d День месяца в виде десятичного числа (01 – 31)
%D Эквивалентно %m/%d/%y.
%e День месяца в виде десятичного числа (1 – 31), где однозначные цифры предшествуют пробелу
%F Эквивалентно %Y-%m-%d.
%g Последние 2 цифры года на основе iso 8601 в виде десятичного числа (00 – 99)
%G Год на основе недели ISO 8601 в виде десятичного числа
%h Сокращенное имя месяца (эквивалентно %b)
%H Час в 24-часовом формате (00 – 23)
%I Час в 12-часовом формате (01 – 12)
%j День года в виде десятичного числа (001 – 366)
%m Месяц в виде десятичного числа (01 – 12)
%M Минута как десятичное число (00 – 59)
%n Символ новой строки (\n)
%p Индикатор A.M./P.M. языкового стандарта для 12-часовых часов
%r 12-часовое время языкового стандарта
%R Эквивалентно %H:%M.
%S Второй в виде десятичного числа (00 – 59)
%t Символ горизонтальной вкладки (\t)
%T Эквивалентно формату %H:%M:%Sвремени ISO 8601
%u ISO 8601 будний день в виде десятичного числа (1 – 7; Понедельник равен 1)
%U Число недели года в виде десятичного числа (00 – 53), где первое воскресенье — первый день недели 1
%V Номер недели ISO 8601 в виде десятичного числа (00 – 53)
%w Будний день в виде десятичного числа (0 – 6; Воскресенье — 0)
%W Число недели года в виде десятичного числа (00 – 53), где первый понедельник является первым днем недели 1
%x Представление даты для языкового стандарта
%X Представление времени для языкового стандарта
%y Год без века, как десятичное число (00 – 99)
%Y Год с веком как десятичное число
%z Смещение от UTC в формате ISO 8601; символы, если часовой пояс неизвестен
%Z Имя часового пояса или сокращенное часового пояса языкового стандарта в зависимости от параметров реестра; символы, если часовой пояс неизвестен
%% Знак процента

Как и в функции printf, любому коду форматирования может предшествовать флаг #. В этом случае значение кода формата изменяется следующим образом.

Форматирование кода Значение
%#a, %#A, %#b, %#B, %#g, %#G, %#h, %#n, %#p, %#t, %#u, %#w, %#X, %#z, %#Z, %#% Флаг # игнорируется.
%#c Длинное представление даты и времени, соответствующее языковому стандарту. Например: "Tuesday, March 14, 1995, 12:41:29".
%#x Длинное представление даты, соответствующее языковому стандарту. Например: "Tuesday, March 14, 1995".
%#d, %#D, %#e, %#F, %#H, %#I, %#j, %#m, %#M, %#r, %#R, %#S, %#T, %#U, %#V, %#W, %#y, %#Y Удалите начальные нули или пробелы (если таковые есть).

ISO 8601 неделя и еженедельный год, созданный %V, %gи %Gиспользует неделю, которая начинается в понедельник. Неделя 1 — это неделя, содержащая четвертый день января, которая является первой неделей, которая включает по крайней мере четыре дня года. Если первый понедельник года является 2-й, 3-й или 4-й, предыдущие дни являются частью последней недели предыдущего года. В эти дни %V заменяется 53, и оба %g%G и заменяются цифрами предыдущего года.

Примечание.

При использовании одной из strftime функций с tm указателем, возвращенным из gmtime, значения, напечатанные с помощью %Z описателей %z , не будут точными. Это связано с тем, что структуру tm , указанную стандартом C, не содержит сведения для имени часового пояса или смещения. Вместо этого данные часового пояса заполняются глобальными переменными _timezone и _dstbias.

Требования

Маршрут Обязательный заголовок
strftime <time.h>
wcsftime <time.h> или <wchar.h>
_strftime_l <time.h>
_wcsftime_l <time.h> или <wchar.h>

_wcsftime_l Функции _strftime_l относятся к корпорации Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

Пример см. в примере time.

См. также

Локаль
Управление временем
Обработка строк
localeconv
setlocale, _wsetlocale
Функции strcoll
strxfrm, wcsxfrm, _strxfrm_l, _wcsxfrm_l