close
Пространства имён
Варианты
Действия

strftime

Материал из cppreference.com
< c | chrono

<metanoindex/>

<tbody> </tbody>
Определено в заголовочном файле <time.h>
size_t strftime( char* str, size_t count, const char* format, tm* time );
Преобразует дату и время из данного time календарного времени, чтобы нулем строку многобайтовых символов str в соответствии с форматом format строку. До count байты записываются.
Оригинал:
Converts the date and time information from a given calendar time time to a null-terminated multibyte character string str according to format string format. Up to count bytes are written.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Параметры

str
указатель на первый элемент массива символов для вывода
Оригинал:
pointer to the first element of the char array for output
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
count
Максимальное число байтов для записи
Оригинал:
maximum number of bytes to write
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
format
Указатель на завершающуюся нулем строку многобайтовых символов, определяющая формат преобразования.

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

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

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

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

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

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

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

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

Одиночному символу предшествует пробел.

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

Перед одиночной цифрой ставится пробел.

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

Одиночному символу предшествует пробел.

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

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

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

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

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

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

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

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

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

Одиночному символу предшествует пробел.

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

Перед одиночной цифрой ставится пробел.

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

Одиночному символу предшествует пробел.

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

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

количество байтов, записанных в массив символов, на которую указывает str не включая завершающий '\0' на успех. Если count была достигнута до того, как вся строка может быть сохранена, 0 возвращается и содержание являются неопределенными.
Оригинал:
number of bytes written into the character array pointed to by str not including the terminating '\0' on success. If count was reached before the entire string could be stored, 0 is returned and the contents are undefined.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Пример

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

int main()
{
    char buff[50] = {0};
    struct tm _tm = {0};
    _tm.tm_year=112; // = year 2012
    _tm.tm_mon=9;    // = 10th month
    _tm.tm_mday=9;   // = 9th day
    _tm.tm_hour=8;   // = 8 hours
    _tm.tm_min=10;   // = 10 minutes
    _tm.tm_sec=20;   // = 20 secs
    if(strftime(buff,50,"%Y-%m-%d %H:%M:%S",&_tm) != 19)
        puts("Error!");
    else
        puts(buff);

    return 0;
}

Вывод:

2012-10-09 08:10:20

См. также

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