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 недели начинаются с понедельника, а первая неделя года должна удовлетворять следующим требованиям:
| tm_year, tm_wday, tm_yday |
g(C99) | выводит последние 2 цифры года по ISO 8601, основанного на неделе, т.е. года, содержащего указанную неделю (диапазон [00,99]). В ISO 8601 недели начинаются с понедельника, а первая неделя года должна удовлетворять следующим требованиям:
| 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 недели начинаются с понедельника, а первая неделя года должна удовлетворять следующим требованиям:
| 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
См. также
|
(устарело в C23)(C11) | преобразует объект tm в текстовое представление (функция) |
|
(устарело в C23)(C11) | преобразует объект time_t в текстовое представление (функция) |
|
(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