std::get_time
Определено в заголовке <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 | - | указатель на завершающую нулём строку CharT, определяющую формат преобразования Строка формата состоит из нуля или более спецификаторов преобразования, пробелов и обычных символов (за исключением
Примечание: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Объект неопределенного типа, такой что
- если
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: отчёт об ошибке #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 из потока (шаблон функции) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/manip/get_time