std::strftime
Определено в заголовочном файле <ctime>
|
||
std::size_t strftime( char* str, std::size_t count, const char* format, const std::tm* tp ); |
||
Преобразует информацию о дате и времени из заданного календарного времени tp в многобайтовую символьную строку str с нулём в конце в соответствии с строкой формата format. Записывается до count байтов.
Содержание |
[править] Параметры
str | — | указатель на первый элемент массива символов для вывода |
count | — | максимальное количество байтов для записи |
format | — | указатель на многобайтовую символьную строку с завершающим нулём, определяющую формат преобразования |
tp | — | указатель на объект, содержащий информацию о дате и времени для преобразования |
[править] Строка формата
Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов (кроме %
). Все обычные символы, включая завершающий нулевой символ, копируются в выходную строку без изменений. Каждая спецификация преобразования начинается с символа %
, за которым может следовать модификатор 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 недели начинаются с понедельника, и первая неделя года должна соответствовать следующим требованиям:
|
tm_year , tm_wday , tm_yday
|
g (C++11) |
записывает последние 2 цифры года по неделям ISO 8601, т.е. года, содержащего указанную неделю (диапазон [00,99] ).
В стандарте ISO 8601 недели начинаются с понедельника, и первая неделя года должна соответствовать следующим требованиям:
|
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 недели начинаются с понедельника, и первая неделя года должна соответствовать следующим требованиям:
|
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
|
[править] Возвращаемое значение
Количество байтов, записанных в массив символов, на который указывает str, не включая завершающий '\0' в случае успеха. Если count было достигнуто до того, как вся строка могла быть сохранена, возвращается 0, а содержимое не определено.
[править] Пример
#include <ctime> #include <iostream> #include <iterator> #include <locale> void utcExample() { // Пример очень популярного формата времени UTC RFC 3339 std::time_t time = std::time({}); char timeString[std::size("yyyy-mm-ddThh:mm:ssZ")]; std::strftime(std::data(timeString), std::size(timeString), "%FT%TZ", std::gmtime(&time)); std::cout << timeString << '\n'; } int main() { std::time_t t = std::time(nullptr); char mbstr[100]; if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t))) { std::cout << mbstr << '\n'; } std::locale::global(std::locale("ja_JP.utf8")); if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t))) { std::cout << mbstr << '\n'; } utcExample(); }
Возможный вывод:
Tuesday Tue Sep 7 19:40:35 2021 火曜日 2021年09月07日 19時40分35秒 2021-09-07T19:40:35Z
[править] Смотрите также
преобразует объект std::tm в текстовое представление (функция) | |
преобразует объект std::time_t в текстовое представление (функция) | |
преобразует объект std::tm в пользовательское текстовое широкосимвольное представление (функция) | |
(C++11) |
форматирует и выводит значение даты/времени в соответствии с указанным форматом (шаблон функции) |
поддержка форматирования для hh_mm_ss (специализация шаблона класса) | |
Документация C по strftime
|