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 | - |
pointer to a null-terminated
CharT
string specifying the conversion format
Строка формата состоит из нуля или более спецификаторов преобразования, пробельных символов и обычных символов (кроме
Примечание:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Возвращаемое значение
Объект неуказанного типа, такой что
-
если
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
объект из потока
(шаблон функции) |