std::time_put<CharT,OutputIt>::put, std::time_put<CharT,OutputIt>::do_put
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <locale> で定義
|
||
public: iter_type put( iter_type out, std::ios_base& str, char_type fill, const std::tm* t, const CharT* fmtbeg, const CharT* fmtend ) const; |
(1) | |
public: iter_type put( iter_type out, std::ios_base& str, char_type fill, const std::tm* t, char format, char modifier = 0 ) const; |
(2) | |
protected: virtual iter_type do_put( iter_type out, std::ios_base& str, char_type fill, const std::tm* t, char format, char modifier ) const; |
(3) | |
t の指す std::tm オブジェクトに格納されているカレンダーの日付および時間を書式文字列 [fmtbeg, fmtend) に従って文字列に変換します。 書式文字列は std::srtftime によって使用されるものと同じですが、各書式指定子は do_put() の個々の呼び出しによって処理され、このファセットを拡張することによってカスタマイズ可能です。
1) 文字シーケンス
[fmtbeg, fmtend) の文字を調べます。 書式シーケンスの一部でないすべての文字は直ちに出力イテレータ out に書き込まれます。 書式シーケンスを識別するために、この関数は std::ctype<char_type>(str.getloc()).narrow(c,0) によって行われたかのように [fmtbeg, fmtend) 内の次の文字 c をナロー化し、それが '%' と等しい場合は、次の1文字または2文字が std::strftime によって認識される書式シーケンスのリストに加えてこのロケールによってサポートされている処理系定義の追加の書式と比較されます。 有効な書式シーケンスのそれぞれについて、 do_put(out, str, fill, t, format, modifier) の呼び出しが行われます。 ただし format は書式シーケンス文字で、 modifier はオプショナルな書式シーケンス修飾子 ('E' または 'O') です。 修飾子がない場合は '\0' の値が使用されます。2) 最も派生したクラスの
do_put メンバ関数を呼びます。3)
t の指す std::tm オブジェクトに格納されているカレンダーの日付および時間を、 '%'、 modifier の値 ('\0' でない場合)、 format の値を連結することによって形成される書式変換シーケンスに従って、文字列に変換します。 書式は関数 std::strftime と同じ方法で解釈されます。 ただし、ロケール依存と説明されている書式はこのロケールによって定義され、追加の書式指定子がサポートされるかもしれません (fill 引数はこれらの処理系定義の書式指定子が使用するために提供されます)。 文字列は出力イテレータ out に書き込まれます。引数
| out | - | 変換の結果が書き込まれる出力イテレータ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| str | - | 必要なときにロケールのファセットを取得するためにこの関数が使用するストリームオブジェクト (文字をナロー化するための std::ctype) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| t | - | 日付と時間の値の取得元である std::tm オブジェクトへのポインタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fmtbeg | - | 変換の書式を指定する char_type 文字のシーケンスの最初の文字へのポインタ。
書式文字列はゼロ個以上の変換指定子と (
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fmtend | - | 変換の書式を指定する char_type 文字のシーケンスの最後の次へのポインタ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fill | - | フィル文字 (通常は空白) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| format | - | 変換指定子の名前の文字 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| modifier | - | % と変換指定子の間に現れるかもしれないオプショナルな修飾子
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
戻り値
生成された最後の文字の次を指すイテレータ。
ノート
エラー処理は提供されません。
fill 文字は、それらの処理系定義の書式指定子のために、およびパディングとフィルのロジックを使用する do_put() のユーザ定義のオーバーライドのために、提供されます。 そのような処理系は一般的に str からの書式化フラグを使用します。
例
Run this code
#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
void try_time_put(const std::tm* t, const std::string& fmt)
{
std::cout.imbue(std::locale());
std::cout << "In the locale '" << std::cout.getloc().name() << "' : '";
std::use_facet<std::time_put<char>>(std::cout.getloc()).put(
{std::cout}, std::cout, ' ', t, &fmt[0], &fmt[0] + fmt.size());
std::cout << "'\n";
}
int main()
{
std::time_t t = std::time(NULL);
std::tm tm = *std::localtime(&t);
std::string fmt = "%c";
std::cout << "Using the format string '" << fmt
<< "' to format the time: " << std::ctime(&t) << '\n';
std::locale::global(std::locale("de_DE.utf8"));
try_time_put(&tm, fmt);
std::locale::global(std::locale("el_GR.utf8"));
try_time_put(&tm, fmt);
std::locale::global(std::locale("ja_JP.utf8"));
try_time_put(&tm, fmt);
}
出力:
Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013
In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST'
In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST'
In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'
関連項目
(C++11) |
指定された書式に従って日付/時刻の値をフォーマットして出力します (関数テンプレート) |
[仮想] (C++11) |
指定された書式に従って、入力ストリームから日付時刻のコンポーネントを抽出します ( std::time_get<CharT,InputIt>の仮想プロテクテッドメンバ関数)
|