template< class CharT >
/*unspecified*/ get_time( std::tm* tmb, const CharT* fmt ); |
|
(C++11以降) |
| | |
式 in >> get_time(tmb, fmt) で使用される場合、入力ストリーム in に現在設定されているロケールの std::time_get ファセットに従って、フォーマット文字列 fmt に従って、文字入力が日付/時刻値として解析されます。結果の値は、tmb が指す std::tm オブジェクトに格納されます。
[編集] パラメータ
| tmb |
-
|
結果が格納される std::tm オブジェクトへの有効なポインタ |
| fmt |
-
|
変換フォーマットを指定するヌル終端された CharT 文字列へのポインタフォーマット文字列は、ゼロ個以上の変換指定子、空白文字、および通常の文字 (% 以外) で構成されます。各通常の文字は、大文字小文字を区別しない比較で入力ストリームの 1 文字と一致すると想定されます。各空白文字は、入力文字列内の任意の空白に一致します。各変換指定は % 文字で始まり、オプションで E または O 修飾子が続きます (ロケールでサポートされていない場合は無視されます)。その後、指定子の動作を決定する文字が続きます。フォーマット指定子は、POSIX 関数 strptime() と一致します。
変換 指定子 |
説明 |
フィールドへの書き込み |
%
|
リテラルの % に一致します。完全な変換指定は %% である必要があります。 |
(なし) |
t
|
任意の空白に一致します。 |
(なし) |
n
|
任意の空白に一致します。 |
(なし) |
| 年 |
Y
|
4桁の10進数として年を解析します。先頭のゼロは許可されますが、必須ではありません。 |
tm_year
|
EY
|
年を代替表現で解析します。例: 平成23年 (年 平成23年)。ja_JP ロケールでは tm_year に 2011 を書き込みます。 |
tm_year
|
y
|
年の下2桁を10進数として解析します。範囲 [69,99] は 1969 から 1999 の値になり、範囲 [00,68] は 2000-2068 の値になります。 |
tm_year
|
Oy
|
年の下2桁を代替数値システムを使用して解析します。例: ja_JP ロケールでは 十一 を 11 として解析します。 |
tm_year
|
Ey
|
ロケールの代替暦期間 %EC からのオフセットとして年を解析します。 |
tm_year
|
C
|
年の最初の2桁を10進数として解析します (範囲 [00,99])。 |
tm_year
|
EC
|
ロケールの代替表現での基になる年 (期間) の名前を解析します。例: ja_JP では 平成 (平成時代)。 |
tm_year
|
| 月 |
b
|
月の名前を、完全または省略形で解析します。例: Oct |
tm_mon
|
h
|
b の同義語です。 |
tm_mon
|
B
|
b の同義語です。 |
tm_mon
|
m
|
月を10進数として解析します (範囲 [01,12])。先頭のゼロは許可されますが、必須ではありません。 |
tm_mon
|
Om
|
月を代替数値システムを使用して解析します。例: ja_JP ロケールでは 十二 を 12 として解析します。 |
tm_mon
|
| 週 |
U
|
年の週を10進数として解析します (日曜日が週の最初の曜日) (範囲 [00,53])。先頭のゼロは許可されますが、必須ではありません。 |
tm_year、tm_wday、tm_yday |
OU
|
%U による年の週を代替数値システムを使用して解析します。例: ja_JP ロケールでは 五十二 を 52 として解析します。 |
tm_year、tm_wday、tm_yday |
W
|
年の週を10進数として解析します (月曜日が週の最初の曜日) (範囲 [00,53])。先頭のゼロは許可されますが、必須ではありません。 |
tm_year、tm_wday、tm_yday |
OW
|
%W による年の週を代替数値システムを使用して解析します。例: ja_JP ロケールでは 五十二 を 52 として解析します。 |
tm_year、tm_wday、tm_yday |
| 年の日/月 |
j
|
年の日を10進数として解析します (範囲 [001,366])。先頭のゼロは許可されますが、必須ではありません。 |
tm_yday
|
d
|
月の日を10進数として解析します (範囲 [01,31])。先頭のゼロは許可されますが、必須ではありません。 |
tm_mday
|
Od
|
月の日を代替数値システムを使用して解析します。例: ja_JP ロケールでは 二十七 を 27 として解析します。先頭のゼロは許可されますが、必須ではありません。 |
tm_mday
|
e
|
d の同義語。 |
tm_mday
|
Oe
|
Od の同義語。 |
tm_mday
|
| 曜日 |
a
|
曜日の名前を、完全または省略形で解析します。例: Fri |
tm_wday
|
A
|
a の同義語。 |
tm_wday
|
w
|
曜日を10進数として解析します。日曜日が 0 です (範囲 [0-6])。 |
tm_wday
|
Ow
|
曜日を10進数として解析します。日曜日が 0 で、代替数値システムを使用します。例: ja_JP ロケールでは 二 を 2 として解析します。 |
tm_wday
|
| 時、分、秒 |
H
|
時を10進数として解析します。24時間クロック (範囲 [00-23])。先頭のゼロは許可されますが、必須ではありません。 |
tm_hour
|
OH
|
24時間クロックの時を代替数値システムを使用して解析します。例: ja_JP ロケールでは 十八 を 18 として解析します。 |
tm_hour
|
I
|
時を10進数として解析します。12時間クロック (範囲 [01,12])。先頭のゼロは許可されますが、必須ではありません。 |
tm_hour
|
OI
|
12時間クロックの時を代替数値システムを使用して解析します。例: ja_JP ロケールでは 六 を 06 として読み取ります。 |
tm_hour
|
M
|
分を10進数として解析します (範囲 [00,59])。先頭のゼロは許可されますが、必須ではありません。 |
tm_min
|
OM
|
分を代替数値システムを使用して解析します。例: ja_JP ロケールでは 二十五 を 25 として解析します。 |
tm_min
|
S
|
秒を10進数として解析します (範囲 [00,60])。先頭のゼロは許可されますが、必須ではありません。 |
tm_sec
|
OS
|
秒を代替数値システムを使用して解析します。例: ja_JP ロケールでは 二十四 を 24 として解析します。 |
tm_sec
|
| その他 |
c
|
ロケールの標準の日付と時刻の文字列フォーマットを解析します。例: Sun Oct 17 04:41:13 2010 (ロケール依存)。 |
すべて |
Ec
|
ロケールの代替の日付と時刻の文字列フォーマットを解析します。例: ja_JP ロケールでは 2011年 の代わりに 平成23年 (年 平成23年) を期待します。 |
すべて |
x
|
ロケールの標準の日付表現を解析します。 |
すべて |
Ex
|
ロケールの代替の日付表現を解析します。例: ja_JP ロケールでは 2011年 の代わりに 平成23年 (年 平成23年) を期待します。 |
すべて |
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 のような関数で使用するには明示的に設定する必要があります。
|
[編集] 戻り値
未指定の型のオブジェクト。その結果、
ここで関数 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 で指定されているように、この関数が呼び出すのは、この関数が fmt に現れる変換指定子によって直接設定されない *tmb のフィールドをゼロクリアするかどうかは未指定です。移植可能なプログラムは、std::get_time を呼び出す前に、*tmb のすべてのフィールドをゼロに初期化する必要があります。
注: 出力を観察するには、clang または gcc >= 12.1 を選択してください。12.1 より前の libstdc++ は %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';
}
実行結果の例
[編集] 関連項目
|
|
入力文字列シーケンスから時刻/日付の値を解析して std::tm に格納する (クラステンプレート) [編集] |
|
|
指定されたフォーマットに従って日付/時刻の値をフォーマットして出力する (関数テンプレート) [編集] |
|
|
ストリームから chrono オブジェクトを解析する (関数テンプレート) [編集] |