Spec-Zone.ru › C

strftime

Определено в заголовке <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 - указатель на первый элемент массива символов для вывода
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 записывает "до н. э." или "до н. э." (зависит от локали) 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, // = year 2012
                          .tm_mon=9,    // = 10th month
                          .tm_mday=9,   // = 9th day
                          .tm_hour=8,   // = 8 hours
                          .tm_min=10,   // = 10 minutes
                          .tm_sec=20    // = 20 secs
    };
 
    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:2023):
    • 7.27.3.5 Функция strftime (c: 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

См. также

asctimeasctime_s
(устарело в C23)(C11)
преобразует объект tm в текстовое представление
(функция)
ctimectime_s
(устарело в C23)(C11)
преобразует объект time_t в текстовое представление
(функция)
wcsftime
(C95)
преобразует объект tm в пользовательское текстовое представление широкой строки
(функция)
Документация C++ для strftime

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/chrono/strftime

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API