Namespaces
Variants

std:: get_time

From cppreference.net
< cpp ‎ | io ‎ | manip
Определено в заголовочном файле <iomanip>
template < class CharT >
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ;
(начиная с C++11)

При использовании в выражении in >> get_time ( tmb, fmt ) , выполняет синтаксический анализ символьного ввода как значения даты/времени в соответствии со строкой формата fmt согласно фасету std::time_get локали, текуще установленной в входном потоке in . Результирующее значение сохраняется в объекте std::tm , на который указывает tmb .

Содержание

Параметры

tmb - корректный указатель на объект std::tm , в который будет сохранен результат
fmt - pointer to a null-terminated CharT string specifying the conversion format

Строка формата состоит из нуля или более спецификаторов преобразования, пробельных символов и обычных символов (кроме % ). Каждый обычный символ должен соответствовать одному символу во входном потоке при сравнении без учета регистра. Каждый пробельный символ соответствует произвольному пробелу во входной строке. Каждая спецификация преобразования начинается с символа % , за которым может следовать модификатор E или O (игнорируется, если не поддерживается локалью), за которым следует символ, определяющий поведение спецификатора. Спецификаторы формата соответствуют функции POSIX strptime() :

Спецификатор
преобразования
Объяснение Записывает в поля
% соответствует символу % . Полная спецификация преобразования должна быть %% (нет)
t соответствует любому пробельному символу (none)
n соответствует любому пробельному символу (none)
Год
Y парсит полный год как 4-значное десятичное число, ведущие нули разрешены, но не обязательны tm_year
EY парсит год в альтернативном представлении, например 平成23年 (год Хэйсэй 23) который записывает 2011 в tm_year в локали ja_JP tm_year
y парсит последние 2 цифры года как десятичное число. Диапазон [69,99] даёт значения 1969-1999, диапазон [00,68] даёт 2000-2068 tm_year
Oy анализирует последние 2 цифры года с использованием альтернативной числовой системы, например 十一 разбирается как 11 в локали ja_JP tm_year
Ey парсит year как смещение от периода альтернативного календаря локали %EC tm_year
C преобразует первые 2 цифры года в десятичное число (диапазон [00,99] ) tm_year
EC парсит название базового года (периода) в альтернативном представлении локали, например, 平成 (эра Хэйсэй) в ja_JP tm_year
Месяц
b парсит название месяца, полное или сокращенное, например Oct tm_mon
h синоним b tm_mon
B синоним b tm_mon
m парсит месяц как десятичное число (диапазон [01,12] ), ведущие нули допускаются, но не обязательны tm_mon
Om парсит месяц используя альтернативную числовую систему, например 十二 парсится как 12 в локали ja_JP tm_mon
Неделя
U парсит неделю года как десятичное число (воскресенье - первый день недели) (диапазон [00,53] ), ведущие нули разрешены, но не обязательны tm_year , tm_wday , tm_yday
OU парсит неделю года , как в %U , используя альтернативную числовую систему, например 五十二 парсится как 52 в локали ja_JP tm_year , tm_wday , tm_yday
W парсит неделю года как десятичное число (понедельник считается первым днём недели) (диапазон [00,53] ), ведущие нули допускаются, но не обязательны tm_year , tm_wday , tm_yday
OW парсит неделю года , как в %W , используя альтернативную числовую систему, например 五十二 парсится как 52 в локали ja_JP tm_year , tm_wday , tm_yday
День года/месяца
j парсит день года как десятичное число (диапазон [001,366] ), ведущие нули допускаются, но не обязательны tm_yday
d парсит день месяца в виде десятичного числа (диапазон [01,31] ), ведущие нули допускаются, но не обязательны tm_mday
Od парсит день месяца с использованием альтернативной числовой системы, например 二十七 парсится как 27 в локали ja_JP, ведущие нули допускаются, но не обязательны tm_mday
e синоним d tm_mday
Oe синоним Od tm_mday
День недели
a анализирует название дня недели, полное или сокращенное, например Fri tm_wday
A синоним a tm_wday
w парсит weekday как десятичное число, где воскресенье равно 0 (диапазон [0-6] ) tm_wday
Ow парсит weekday как десятичное число, где воскресенье равно 0 , используя альтернативную числовую систему, например 二 парсится как 2 в локали ja_JP tm_wday
Час, минута, секунда
H парсит час как десятичное число, 24-часовой формат (диапазон [00-23] ), ведущие нули разрешены, но не обязательны tm_hour
OH парсит hour из 24-часового формата с использованием альтернативной числовой системы, например 十八 парсится как 18 в локали ja_JP tm_hour
I парсит hour как десятичное число, 12-часовой формат (диапазон [01,12] ), ведущие нули допускаются, но не обязательны tm_hour
OI парсит час из 12-часового формата с использованием альтернативной числовой системы, например 六 читается как 06 в локали ja_JP tm_hour
M парсит минуты как десятичное число (диапазон [00,59] ), ведущие нули разрешены, но не обязательны tm_min
OM парсит minute используя альтернативную числовую систему, например 二十五 парсится как 25 в локали ja_JP tm_min
S парсит секунды как десятичное число (диапазон [00,60] ), ведущие нули разрешены, но не обязательны tm_sec
OS парсит second используя альтернативную числовую систему, например 二十四 парсится как 24 в локали ja_JP tm_sec
Другое
c анализирует стандартный строковый формат даты и времени локали, например Sun Oct 17 04:41:13 2010 (зависит от локали) все
Ec парсит альтернативный формат строки даты и времени локали, например, ожидая 平成23年 (год Хэйсэй 23) вместо 2011年 (год 2011) в локали ja_JP все
x анализирует стандартное представление даты в локали все
Ex анализирует альтернативное представление даты в локали, например, ожидает 平成23年 (год Хэйсэй 23) вместо 2011年 (год 2011) в локали ja_JP все
X анализирует стандартное представление времени в локали все
EX анализирует альтернативное представление времени локали все
D эквивалентно "%m / %d / %y " tm_mon , tm_mday , tm_year
r парсит стандартное 12-часовое время локали (в POSIX, "%I : %M : %S %p" ) tm_hour , tm_min , tm_sec
R эквивалентно "%H : %M" tm_hour , tm_min
T эквивалентно "%H : %M : %S" tm_hour , tm_min , tm_sec
p анализирует локальный эквивалент a.m. или p.m. tm_hour

Примечание: tm_isdst не записывается автоматически и должно быть установлено явно для использования с функциями такими как mktime


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

Объект неуказанного типа, такой что

  • если in является объектом типа std:: basic_istream < CharT, Traits > , то выражение in >> get_time ( tmb, fmt )
    • имеет тип std:: basic_istream < CharT, Traits > &
    • имеет значение in
    • ведет себя как если бы оно вызывало f ( in, tmb, fmt )

где функция f определена как:

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, std::tm* tmb, const CharT* fmt)
{
    using Iter = std::istreambuf_iterator<CharT, Traits>;
    using TimeGet = time_get<CharT, Iter>;
    std::ios_base::iostate err = std::ios_base::goodbit;
    const TimeGet& tg = std::use_facet<TimeGet>(str.getloc());
    tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
        fmt, fmt + Traits::length(fmt));
    if (err != std::ios_base::goodbit)
        str.setstate(err);
}

Примечания

Как указано в std::time_get::do_get (которую вызывает эта функция), не определено, обнуляет ли эта функцию поля в * tmb , которые не устанавливаются напрямую спецификаторами преобразования в fmt : переносимые программы должны инициализировать все поля * tmb нулями перед вызовом std::get_time .

Пример

Примечание: для просмотра вывода выберите clang или gcc >= 12.1. libstdc++ до версии 12.1 некорректно реализует % b спецификатор: bug #78714 .

#include <iomanip>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail())
        std::cout << "Parse failed\n";
    else
        std::cout << std::put_time(&t, "%c") << '\n';
}

Возможный вывод:

Sun Feb 18 23:12:34 2011

Смотрите также

парсит значения времени/даты из входной последовательности символов в std::tm
(шаблон класса)
(C++11)
форматирует и выводит значение даты/времени согласно указанному формату
(шаблон функции)
(C++20)
парсит chrono объект из потока
(шаблон функции)