Spec-Zone.ru › C++

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 недели начинаются с понедельника, и первая неделя года должна удовлетворять следующим требованиям:

  • Включает 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

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

Объект неопределённого типа, такой что

  • если 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

См. также

time_put
форматирует содержимое std::tm для вывода в виде последовательности символов
(шаблон класса)
get_time
(C++11)
анализирует значение даты/времени заданного формата
(шаблон функции)
strftime
преобразует объект std::tm в пользовательское текстовое представление
(функция)
wcsftime
преобразует объект 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

Spec-Zone.ru

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