std:: get_time
|
定義先ヘッダ
<iomanip>
|
||
|
template
<
class
CharT
>
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ; |
(C++11以降) | |
式内で in >> get_time ( tmb, fmt ) が使用されると、入力ストリーム in に現在設定されているロケールの std::time_get ファセットに従い、書式文字列 fmt で指定された形式に従って文字列入力を日付/時刻値として解析します。結果の値は std::tm オブジェクト tmb が指す領域に格納されます。
目次 |
パラメータ
| tmb | - | 結果が格納される std::tm オブジェクトへの有効なポインタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fmt | - |
pointer to a null-terminated
CharT
string specifying the conversion format
書式文字列は、0個以上の変換指定子、空白文字、および普通の文字(
注記:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
戻り値
未指定の型のオブジェクトであり、以下の条件を満たすもの
-
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
に現れる変換指定子によって直接設定されないものについて、この関数がゼロクリアするかどうかは未規定です:移植性のあるプログラムでは、
std::get_time
を呼び出す前に
*
tmb
の全フィールドをゼロに初期化する必要があります。
例
注意: 出力を確認するには clang または gcc >= 12.1 を選択してください。12.1 より前の libstdc++ は % 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
オブジェクトを解析する
(関数テンプレート) |