Namespaces
Variants

strftime

From cppreference.net
Определено в заголовочном файле <time.h>
size_t strftime ( char * str, size_t count,
const char * format, const struct tm * tp ) ;
(до C99)
size_t strftime ( char * restrict str, size_t count,
const char * restrict format, const struct tm * restrict tp ) ;
(начиная с C99)

Преобразует информацию о дате и времени из заданного календарного времени tp в строку многобайтовых символов с нулевым завершением str в соответствии с строкой формата format . Записывается до count байт.

Содержание

Параметры

str - указатель на первый элемент char массива для вывода
count - максимальное количество байт для записи
format - указатель на нуль-терминированную многобайтовую строку символов, определяющую формат преобразования
tp - указатель на struct tm объект, определяющий форматируемое время

Строка формата

Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов (за исключением % ). Все обычные символы, включая завершающий нулевой символ, копируются в выходную строку без изменений. Каждая спецификация преобразования начинается с символа % , за которым может следовать модификатор E или O (игнорируется, если не поддерживается локалью), после которого следует символ, определяющий поведение спецификатора. Доступны следующие спецификаторы формата:

Спецификатор
преобразования
Объяснение Используемые поля
% выводит символ % . Полная спецификация преобразования должна быть %% .
n
(C99)
записывает символ новой строки
t
(C99)
записывает символ горизонтальной табуляции
Год
Y записывает год в виде десятичного числа, например 2017 tm_year
EY
(C99)
записывает год в альтернативном представлении, например 平成23年 (год Хэйсэй 23) вместо 2011年 (год 2011) в локали ja_JP tm_year
y записывает последние 2 цифры года в виде десятичного числа (диапазон [00,99] ) tm_year
Oy
(C99)
записывает последние 2 цифры года используя альтернативную числовую систему, например 十一 вместо 11 в локали ja_JP tm_year
Ey
(C99)
записывает год как смещение от периода альтернативного календаря локали %EC (зависит от локали) tm_year
C
(C99)
записывает первые 2 цифры года в виде десятичного числа (диапазон [00,99] ) tm_year
EC
(C99)
записывает название базового года (периода) в альтернативном представлении локали, например 平成 (эра Хэйсэй) в ja_JP tm_year
G
(C99)
записывает год по неделям ISO 8601 , т.е. год, который содержит указанную неделю.

В стандарте ISO 8601 недели начинаются с понедельника, и первая неделя года должна удовлетворять следующим требованиям:

  • Включает 4 января
  • Включает первый четверг года
tm_year , tm_wday , tm_yday
g
(C99)
выводит последние 2 цифры ISO 8601 недельного года , т.е. года, содержащего указанную неделю (диапазон [00,99] ).

В стандарте ISO 8601 недели начинаются с понедельника, и первая неделя года должна удовлетворять следующим требованиям:

  • Включает 4 января
  • Включает первый четверг года
tm_year , tm_wday , tm_yday
Месяц
b записывает сокращенное название месяца , например Oct (зависит от локали) tm_mon
Ob
(C23)
записывает сокращенное название месяца в альтернативном представлении локали tm_mon
h
(C99)
синоним b tm_mon
B записывает полное название месяца , например October (зависит от локали) tm_mon
OB
(C23)
записывает соответствующее полное название месяца в альтернативном представлении локали tm_mon
m записывает месяц в виде десятичного числа (диапазон [01,12] ) tm_mon
Om
(C99)
записывает месяц с использованием альтернативной числовой системы, например 十二 вместо 12 в локали ja_JP tm_mon
Неделя
U записывает неделю года в виде десятичного числа (воскресенье является первым днём недели) (диапазон [00,53] ) tm_year , tm_wday , tm_yday
OU
(C99)
записывает неделю года , как в %U , используя альтернативную числовую систему, например 五十二 вместо 52 в локали ja_JP tm_year , tm_wday , tm_yday
W записывает неделю года в виде десятичного числа (понедельник является первым днём недели) (диапазон [00,53] ) tm_year , tm_wday , tm_yday
OW
(C99)
записывает неделю года , как в %W , используя альтернативную числовую систему, например 五十二 вместо 52 в локали ja_JP tm_year , tm_wday , tm_yday
V
(C99)
записывает неделю года по ISO 8601 (диапазон [01,53] ).

В стандарте ISO 8601 недели начинаются с понедельника, и первая неделя года должна удовлетворять следующим требованиям:

  • Включает 4 января
  • Включает первый четверг года
tm_year , tm_wday , tm_yday
OV
(C99)
записывает неделю года , как в %V , используя альтернативную числовую систему, например 五十二 вместо 52 в локали ja_JP tm_year , tm_wday , tm_yday
День года/месяца
j записывает день года в виде десятичного числа (диапазон [001,366] ) tm_yday
d записывает день месяца в виде десятичного числа (диапазон [01,31] ) tm_mday
Od
(C99)
записывает день месяца с нумерацией с нуля, используя альтернативную числовую систему, например 二十七 вместо 27 в локали ja_JP

Одиночный символ предваряется пробелом.

tm_mday
e
(C99)
записывает день месяца в виде десятичного числа (диапазон [1,31] ).

Однозначное число предваряется пробелом.

tm_mday
Oe
(C99)
записывает день месяца с единицы используя альтернативную числовую систему, например 二十七 вместо 27 в локали ja_JP

Одиночный символ предваряется пробелом.

tm_mday
День недели
a выводит сокращенное название дня недели , например Fri (зависит от локали) tm_wday
A записывает полное название дня недели , например Friday (зависит от локали) tm_wday
w записывает день недели в виде десятичного числа, где воскресенье равно 0 (диапазон [0-6] ) tm_wday
Ow
(C99)
записывает день недели , где воскресенье равно 0 , используя альтернативную числовую систему, например 二 вместо 2 в локали ja_JP tm_wday
u
(C99)
записывает день недели в виде десятичного числа, где понедельник соответствует 1 (формат ISO 8601) (диапазон [1-7] ) tm_wday
Ou
(C99)
записывает день недели , где понедельник равен 1 , используя альтернативную числовую систему, например 二 вместо 2 в локали ja_JP tm_wday
Час, минута, секунда
H записывает час в виде десятичного числа, 24-часовой формат (диапазон [00-23] ) tm_hour
OH
(C99)
записывает час по 24-часовому формату с использованием альтернативной числовой системы, например 十八 вместо 18 в локали ja_JP tm_hour
I записывает час в виде десятичного числа, 12-часовой формат (диапазон [01,12] ) tm_hour
OI
(C99)
записывает час из 12-часового формата с использованием альтернативной числовой системы, например 六 вместо 06 в локали ja_JP tm_hour
M записывает минуту в виде десятичного числа (диапазон [00,59] ) tm_min
OM
(C99)
записывает минуты используя альтернативную числовую систему, например 二十五 вместо 25 в локали ja_JP tm_min
S записывает секунды в виде десятичного числа (диапазон [00,60] ) tm_sec
OS
(C99)
записывает секунды используя альтернативную числовую систему, например 二十四 вместо 24 в локали ja_JP tm_sec
Другое
c выводит стандартную строку даты и времени , например Sun Oct 17 04:41:13 2010 (зависит от локали) все
Ec
(C99)
записывает альтернативную строку даты и времени , например, используя 平成23年 (год Хэйсэй 23) вместо 2011年 (год 2011) в локали ja_JP все
x записывает локализованное представление даты (зависит от локали) все
Ex
(C99)
записывает альтернативное представление даты , например, использование 平成23年 (год Хэйсэй 23) вместо 2011年 (год 2011) в локали ja_JP все
X записывает локализованное представление времени , например 18:40:20 или 6:40:20 PM (зависит от локали) все
EX
(C99)
записывает альтернативное представление времени (зависит от локали) все
D
(C99)
эквивалентно "%m/%d/%y" tm_mon , tm_mday , tm_year
F
(C99)
эквивалентно "%Y-%m-%d" (формат даты ISO 8601) tm_mon , tm_mday , tm_year
r
(C99)
записывает локализованное 12-часовое время (зависит от локали) tm_hour , tm_min , tm_sec
R
(C99)
эквивалентно "%H:%M" tm_hour , tm_min
T
(C99)
эквивалентно "%H:%M:%S" (формат времени ISO 8601) tm_hour , tm_min , tm_sec
p выводит локализованное a.m. или p.m. (зависит от локали) tm_hour
z
(C99)
записывает смещение от UTC в формате ISO 8601 (например, -0430 ), или не выводит символов, если информация о часовом поясе недоступна tm_isdst
Z записывает зависящее от локали название часового пояса или аббревиатуру , или не выводит символы, если информация о часовом поясе недоступна tm_isdst

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

Количество байтов, записанных в массив символов, на который указывает str , не включая завершающий ' \0 ' при успешном выполнении. Если count был достигнут до того, как вся строка могла быть сохранена, 0 возвращается и содержимое становится неопределённым.

Пример

#include <locale.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
    char buff[70];
    struct tm my_time = { .tm_year = 112, // = год 2012
                          .tm_mon = 9,    // = 10-й месяц
                          .tm_mday = 9,   // = 9-й день
                          .tm_hour = 8,   // = 8 часов
                          .tm_min = 10,   // = 10 минут
                          .tm_sec = 20    // = 20 секунд
    };
    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");
    setlocale(LC_TIME, "el_GR.utf8");
    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");
}

Возможный вывод:

Sunday Sun Oct  9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.27.3.5 Функция strftime (стр: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.27.3.5 Функция strftime (стр: 288-291)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.27.3.5 Функция strftime (стр: 394-397)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.23.3.5 Функция strftime (стр: 343-347)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.5 Функция strftime

Смотрите также

(устарело в C23) (C11)
преобразует объект tm в текстовое представление
(функция)
(устарело в C23) (C11)
преобразует объект time_t в текстовое представление
(функция)
преобразует объект tm в пользовательское широкосимвольное текстовое представление
(функция)