std::put_time
Определено в заголовке <iomanip> | ||
|---|---|---|
template< class CharT > /*unspecified*/ put_time( const std::tm* tmb, const CharT* fmt ); | (с C++11) |
При использовании в выражении out << put_time(tmb, fmt), преобразует информацию о дате и времени из заданного календарного времени tmb в строку символов в соответствии с строкой формата fmt, как если бы вызывались std::strftime, std::wcsftime, или аналогичная функция (в зависимости от CharT) в соответствии с std::time_put компонентом локалей, в настоящее время используемых в потоке вывода out.
Параметры
| tmb | - | указатель на структуру календарного времени, полученную из std::localtime или std::gmtime |
| fmt | - | указатель на завершающуюся нулём CharT строку, задающую формат преобразования |
Строка формата
Строка формата состоит из нуля или более спецификаторов преобразования и обычных символов (кроме %). Все обычные символы, включая завершающий нулевой символ, копируются в выходную строку без изменений. Каждый спецификатор преобразования начинается с символа % , необязательно после которого следуют 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 |
Возвращаемое значение
Объект неопределённого типа, такой что
- если
outявляется объектом типаstd::basic_ostream<CharT, Traits>, выражениеout << put_time(tmb, fmt)- имеет тип
std::basic_ostream<CharT, Traits>& - имеет значение
out - ведет себя так, как будто вызвало
f(out, tmb, fmt)
- имеет тип
где функция f определена как:
template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, const std::tm* tmb, const CharT* fmt)
{
using Iter = std::ostreambuf_iterator<CharT, Traits>;
using TimePut = std::time_put<CharT, Iter>;
const TimePut& tp = std::use_facet<TimePut>(str.getloc());
const Iter end = tp.put(Iter(str.rdbuf()), str, str.fill(), tmb,
fmt, fmt + Traits::length(fmt));
if (end.failed())
str.setstate(std::ios_base::badbit);
}Пример
#include <ctime>
#include <iomanip>
#include <iostream>
int main()
{
std::time_t t = std::time(nullptr);
std::tm tm = *std::localtime(&t);
std::cout.imbue(std::locale("ru_RU.utf8"));
std::cout << "ru_RU: " << std::put_time(&tm, "%c %Z") << '\n';
std::cout.imbue(std::locale("ja_JP.utf8"));
std::cout << "ja_JP: " << std::put_time(&tm, "%c %Z") << '\n';
}Возможный вывод:
ru_RU: Ср. 28 дек. 2011 10:21:16 EST ja_JP: 2011年12月28日 10時21分16秒 EST
См. также
форматирует содержимое std::tm для вывода в виде последовательности символов (шаблон класса) |
|
|
(C++11) | анализирует значение даты/времени заданного формата (шаблон функции) |
преобразует объект std::tm в пользовательское текстовое представление (функция) |
|
преобразует объект std::tm в пользовательское текстовое представление широкой строки (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/manip/put_time