time_get 类
此类模板描述可用作区域设置 facet 的对象,此对象用于控制 CharType
类型序列到时间值的转换。
语法
template <class CharType,
class InputIterator = istreambuf_iterator<CharType>>
class time_get : public time_base;
参数
CharType
在程序中用于对字符进行编码的类型。
InputIterator
从中读取时间值的迭代器。
备注
对于任何区域设置 facet,静态对象 ID 的初始存储值为零。 首次尝试访问其存储值后,将在 ID 中存储唯一正值。
构造函数
构造函数 | 说明 |
---|---|
time_get | time_get 类型的对象的构造函数。 |
Typedef
类型名称 | 说明 |
---|---|
char_type | 一种类型,此类型用于描述区域设置使用的字符。 |
iter_type | 一种类型,此类型描述输入迭代器。 |
成员函数
成员函数 | 说明 |
---|---|
date_order | 返回 facet 使用的日期顺序。 |
do_date_order | 为返回 facet 使用的日期顺序而调用的受保护虚拟成员函数。 |
do_get | 读取字符数据并转换为时间值。 |
do_get_date | 一种受保护的虚拟成员函数,通过调用此函数可分析作为 x 的 strftime 说明符所生成日期的字符串。 |
do_get_monthname | 为分析作为月份名称的字符串而调用的受保护虚拟函数。 |
do_get_time | 一种受保护的虚拟成员函数,通过调用此函数可分析作为 X 的 strftime 说明符所生成日期的字符串。 |
do_get_weekday | 为分析作为周日期名称的字符串而调用的受保护虚拟成员函数。 |
do_get_year | 为分析作为年份名称的字符串而调用的受保护虚拟成员函数。 |
get | 从字符数据源读取,并将此数据转换为存储在时间结构中的时间。 |
get_date | 分析作为 x 的 strftime 说明符所生成日期的字符串。 |
get_monthname | 分析作为月份名称的字符串。 |
get_time | 分析作为 X 的 strftime 说明符所生成日期的字符串。 |
get_weekday | 分析作为周日期名称的字符串。 |
get_year | 分析作为年份名称的字符串。 |
要求
标头:<locale>
命名空间: std
time_get::char_type
一种类型,此类型用于描述区域设置使用的字符。
typedef CharType char_type;
备注
该类型是模板参数 CharType 的同义词。
time_get::date_order
返回 facet 使用的日期顺序。
dateorder date_order() const;
返回值
facet 使用的日期顺序。
注解
此成员函数返回 do_date_order。
示例
// time_get_date_order.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
void po( char *p )
{
locale loc( p );
time_get <char>::dateorder order = use_facet <time_get <char> >( loc ).date_order ( );
cout << loc.name( );
switch (order){
case time_base::dmy: cout << "(day, month, year)" << endl;
break;
case time_base::mdy: cout << "(month, day, year)" << endl;
break;
case time_base::ydm: cout << "(year, day, month)" << endl;
break;
case time_base::ymd: cout << "(year, month, day)"<< endl;
break;
case time_base::no_order: cout << "(no_order)"<< endl;
break;
}
}
int main( )
{
po( "C" );
po( "german" );
po( "English_Britain" );
}
C(month, day, year)
German_Germany.1252(day, month, year)
English_United Kingdom.1252(day, month, year)
time_get::do_date_order
为返回 facet 使用的日期顺序而调用的受保护虚拟成员函数。
virtual dateorder do_date_order() const;
返回值
facet 使用的日期顺序。
备注
受保护的虚拟成员函数返回类型为 time_base::dateorder 的值,该值描述与 do_get_date 匹配的日期组件的顺序。 在此实现中,值为 time_base::mdy,对应为 12 月 2 日,1979 年。
示例
请参阅 date_order 示例,它调用 do_date_order
。
time_get::do_get
读取字符数据并转换为时间值。 接受一个转换说明符和修饰符。
virtual iter_type
do_get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm,
char fmt,
char mod) const;
参数
first
一个输入迭代器,它指示要转换的序列的开始位置。
last
一个输入迭代器,它指示序列的结束位置。
iosbase
一个流对象。
State
iosbase 中的字段,其中设置了相应的位掩码元素来指示错误。
ptm
指向要存储时间的时间结构的指针。
fmt
一个转换说明符字符。
mod
一个可选修饰符字符。
返回值
返回一个迭代器,该迭代器指定第一个未经转换的元素。 转换失败会在 state
中设置 ios_base::failbit
并返回 first。
备注
虚拟成员函数将转换并跳过 [first
, last
) 范围中的一个或多个输入元素,以便确定存储在 *pt
的一个或多个成员中的值。 转换失败会在 state
中设置 ios_base::failbit
并返回 first。 否则,该函数返回指定第一个未转换元素的迭代器。
转换说明符是:
'a'
或 'A'
- 与 time_get::get_weekday 的行为相同。
'b'
、'B'
或 'h'
-- 与 time_get::get_monthname 的行为相同。
'c'
-- 与 "%b %d %H : %M : %S %Y"
的行为相同。
'C'
-- 将 [0,99] 范围内的一个十进制输入字段转换为值 val
,并将 val * 100 - 1900
存储在 pt-&tm_year
中。
'd'
或 'e'
-- 转换 [1,31] 范围内的一个十进制输入字段,并且其将值存储在 pt-&tm_mday
中。
'D'
-- 与 "%m / %d / %y"
的行为相同。
'H'
-- 转换 [0,23] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_hour
中。
'I'
-- 转换 [0,11] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_hour
中。
'j'
-- 转换 [1,366] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_yday
中。
'm'
-- 将 [1,12] 范围内的一个十进制输入字段转换为值 val
,存储 val - 1
,并将其值存储在 pt-&tm_mon
中。
'M'
-- 转换 [0,59] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_min
中。
'n'
或 't'
-- 与 " "
的行为相同。
'p'
-- 将“AM”或“am”转换为零,将“PM”或“pm”转换为 12,并将此值添加到 pt-&tm_hour
。
'r'
-- 与 "%I : %M : %S %p"
的行为相同。
'R'
-- 与 "%H %M"
的行为相同。
'S'
-- 转换 [0,59] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_sec
中。
'T'
或 'X'
-- 与 "%H : %M : S"
的行为相同。
'U'
-- 转换 [0,53] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_yday
中。
'w'
-- 转换 [0,6] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_wday
中。
'W'
-- 转换 [0,53] 范围内的一个十进制输入字段,并将其值存储在 pt-&tm_yday
中。
'x'
-- 与 "%d / %m / %y"
的行为相同。
'y'
-- 将 [0,99] 范围内的一个十进制输入字段转换为值 val
,并将 val < 69 val + 100 : val
存储在 pt-&tm_year
中。
'Y'
-- 与 time_get::get_year 的行为相同。
任何其他转换说明符设置 state
中的 ios_base::failbit
并返回。 在此实现中,任何修饰符都无效。
time_get::do_get_date
一种受保护的虚拟成员函数,通过调用此函数可分析作为 strftime
的 x 说明符所生成日期的字符串。
virtual iter_type do_get_date(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储日期信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
受保护的虚拟成员函数首先会在序列 [ first
, last
) 中尝试匹配有序元素,直到识别到完整的非空日期输入字段。 如果成功,则会将此字段转换为等效于组件 tm::tm_mon、tm::tm_day 和 tm::tm_year 的值,并将结果分别存储在 ptm->tm_mon
、ptm->tm_day
和 ptm->tm_year
中。 它将返回一个迭代器,指定第一个超出日期输入字段的元素。 否则,此函数在 state 中设置 iosbase::failbit
。 它将返回一个迭代器,指定第一个超出有效日期输入字段的任何前缀的元素。 在任一情况下,如果返回的值等于 last,该函数在 state 中设置 ios_base::eofbit
。
日期输入字段的格式依赖于区域设置。 对于默认区域设置,日期输入字段的格式为 MMM DD,YYYY,其中:
MMM 通过调用 get_monthname 得到,表示月份。
DD 是十进制数字的序列,其对应的数值必须在 [1, 31] 范围内,表示月份中的天数。
YYYY 通过调用 get_year 得到,表示年份。
字面空格和逗号必须匹配输入序列中相应的元素。
示例
请参阅 get_date 的示例,它调用 do_get_date
。
time_get::do_get_monthname
为分析作为月份名称的字符串而调用的受保护虚拟函数。
virtual iter_type do_get_monthname(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
未使用。
state
根据操作是否成功,设置流状态的相应位掩码元素的输出参数。
ptm
指向要存储月份信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
注解
受保护的虚拟成员函数首先会在序列 [ first
, last
) 中尝试匹配有序元素,直到识别到完整的非空月份输入字段。 如果成功,则会将此字段转换为等效于组件 tm::tm_mon 的值,并将结果存储在 ptm->tm_mon
中。 它将返回一个迭代器,指定第一个超出月份输入字段的元素。 否则,此函数在 state 中设置 ios_base::failbit
。 它将返回一个迭代器,指定第一个超出月份输入字段的任何前缀的元素。 在任一情况下,如果返回的值等于 last,该函数在 state 中设置 ios_base::eofbit
。
月份输入字段是匹配最长的一组特定于区域序列的序列,如 1 月、2 月、3 月、4 月等。 转换后的值是自 1 月份以来的月数。
示例
请参阅 get_monthname 的示例,它调用 do_get_monthname
。
time_get::do_get_time
一种受保护的虚拟成员函数,通过调用此函数可分析作为 strftime
的 X 说明符所生成日期的字符串。
virtual iter_type do_get_time(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
未使用。
State
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储日期信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
受保护的虚拟成员函数首先会在序列 [ first
, last
) 中尝试匹配有序元素,直到识别到完整的非空时间输入字段。 如果成功,则会将此字段转换为等效于组件 tm::tm_hour
、tm::tm_min
和 tm::tm_sec
的值,并将结果分别存储在 ptm->tm_hour
、ptm->tm_min
和 ptm->tm_sec
中。 它将返回一个迭代器,指定第一个超出时间输入字段的元素。 否则,此函数在 state 中设置 ios_base::failbit
。 它将返回一个迭代器,指定第一个超出时间输入字段的元素。 在任一情况下,如果返回的值等于 last,该函数在 state 中设置 ios_base::eofbit
。
在此实现中,时间输入字段采用以下格式:HH:MM:SS,其中:
HH 是十进制数字的序列,其对应的数值必须在 [0,24)范围内,表示小时。
MM 是十进制数字的序列,其对应的数值必须在 [0,60)范围内,表示分钟。
SS 是十进制数字的序列,其对应的数值必须在 [0,60)范围内,表示秒。
字面冒号必须匹配输入序列中相应的元素。
示例
请参阅 get_time 的示例,它调用 do_get_time
。
time_get::do_get_weekday
为分析作为周日期名称的字符串而调用的受保护虚拟成员函数。
virtual iter_type do_get_weekday(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储的工作日信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
注解
受保护的虚拟成员函数在序列 [ first
, last
) 中从 first 开始尝试匹配有序元素,直到识别到完整的非空工作日输入字段。 如果成功,则会将此字段转换为等效于组件 tm::tm_wday 的值,并将结果存储在 ptm->tm_wday
中。 它将返回一个迭代器,指定第一个超出工作日输入字段的元素。 否则,此函数在 state 中设置 ios_base::failbit
。 它将返回一个迭代器,指定第一个超出有效工作日输入字段的任何前缀的元素。 在任一情况下,如果返回的值等于 last,该函数在 state 中设置 ios_base::eofbit
。
工作日输入字段是匹配最长的一组特定于区域序列的序列,如周日(星期日)、周一(星期一)等。 转换后的值是自星期日以来的天数。
示例
请参阅 get_weekday 的示例,它调用 do_get_weekday
。
time_get::do_get_year
为分析作为年份名称的字符串而调用的受保护虚拟成员函数。
virtual iter_type do_get_year(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储的年份信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
受保护的虚拟成员函数在序列 [ first
, last
) 中从 first 开始尝试匹配有序元素,直到识别到完整的非空年份输入字段。 如果成功,则会将此字段转换为等效于组件 tm::tm_year 的值,并将结果存储在 ptm->tm_year
中。 它将返回一个迭代器,指定第一个超出年份输入字段的元素。 否则,此函数在 state 中设置 ios_base::failbit
。 它将返回一个迭代器,指定第一个超出有效年份输入字段的元素。 在任一情况下,如果返回的值等于 last,该函数在 state 中设置 ios_base::eofbit
。
年份输入字段是十进制数字的序列,其对应的数值必须在 [1900, 2036) 范围内。 存储的值为此值减去 1900。 在此实现中,值范围 [69, 136) 表示年份范围 [1969、2036)。 也可使用值范围 [0, 69),但可能表示年份范围 [1900, 1969) 或 [2000, 2069),具体取决于转换环境。
示例
请参阅 get_year 的示例,它调用 do_get_year
。
time_get::get
从字符数据源读取,并将此数据转换为存储在时间结构中的时间。 第一个函数接受一个转换说明符和修饰符,而第二个接受多个。
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm,
char fmt,
char mod) const;
iter_type get(
iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm,
char_type* fmt_first,
char_type* fmt_last) const;
参数
first
一个输入迭代器,它指示从何处开始转换序列。
last
一个输入迭代器,它指示在何处结束序列转换。
iosbase
流。
State
为流状态设置适当的位掩码元素以指示错误。
ptm
一个指针,它指向要存储时间的时间结构。
fmt
一个转换说明符字符。
mod
一个可选修饰符字符。
fmt_first
指向格式指令开始的位置。
fmt_last
指向格式指令结束的位置。
返回值
将迭代器返回到用于分配时间结构 *ptm
的数据后面的第一个字符。
备注
第一个成员函数返回 do_get(first, last, iosbase, state, ptm, fmt, mod)
。
第二个成员函数调用以 [fmt_first, fmt_last)
分隔的格式的控件下的 do_get
。 它将格式视为一个字段序列,其中每个字段确定了以 [first, last)
分隔的 0 个或多个输入元素的转换。 它返回一个迭代器,指定第一个未转换的元素。 有三种类型的字段:
格式中的百分号 (%),后跟 [EOQ#] 集中的一个可选修饰符 mod,后跟转换说明符 fmt,将 first 替换为 do_get(first, last, iosbase, state, ptm, fmt, mod)
返回的值。 转换失败会在 state 中设置 ios_base::failbit
并进行返回。
格式中的空白元素会跳过零个或多个输入空白元素。
格式中的任何其他元素必须匹配下一个输入元素,它会被跳过。 匹配失败会在 state 中设置 ios_base::failbit
并进行返回。
time_get::get_date
分析作为 strftime
的 x 说明符所生成日期的字符串。
iter_type get_date(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储日期信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
注解
成员函数返回 do_get_date(first
, last
, iosbase
, state
, ptm
)。
请注意,月份从 0 到 11 进行计算。
示例
// time_get_get_date.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
int main( )
{
locale loc;
basic_stringstream< char > pszGetF, pszPutF, pszGetI, pszPutI;
ios_base::iostate st = 0;
struct tm t;
memset(&t, 0, sizeof(struct tm));
pszGetF << "July 4, 2000";
pszGetF.imbue( loc );
basic_istream<char>::_Iter i = use_facet <time_get<char> >
(loc).get_date(basic_istream<char>::_Iter(pszGetF.rdbuf( ) ),
basic_istream<char>::_Iter(0), pszGetF, st, &t);
if ( st & ios_base::failbit )
cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
else
cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") ="
<< "\ntm_sec: " << t.tm_sec
<< "\ntm_min: " << t.tm_min
<< "\ntm_hour: " << t.tm_hour
<< "\ntm_mday: " << t.tm_mday
<< "\ntm_mon: " << t.tm_mon
<< "\ntm_year: " << t.tm_year
<< "\ntm_wday: " << t.tm_wday
<< "\ntm_yday: " << t.tm_yday
<< "\ntm_isdst: " << t.tm_isdst
<< endl;
}
time_get(July 4, 2000) =
tm_sec: 0
tm_min: 0
tm_hour: 0
tm_mday: 4
tm_mon: 6
tm_year: 100
tm_wday: 0
tm_yday: 0
tm_isdst: 0
time_get::get_monthname
分析作为月份名称的字符串。
iter_type get_monthname(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
未使用。
state
根据操作是否成功,设置流状态的相应位掩码元素的输出参数。
ptm
指向要存储月份信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
注解
成员函数返回 do_get_monthname(first
, last
, iosbase
, state
, ptm
)。
示例
// time_get_get_monthname.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
int main( )
{
locale loc ( "French" );
basic_stringstream<char> pszGetF, pszPutF, pszGetI, pszPutI;
ios_base::iostate st = 0;
struct tm t;
memset( &t, 0, sizeof( struct tm ) );
pszGetF << "juillet";
pszGetF.imbue( loc );
basic_istream<char>::_Iter i = use_facet <time_get <char> >
(loc).get_monthname(basic_istream<char>::_Iter(pszGetF.rdbuf( )),
basic_istream<char>::_Iter(0), pszGetF, st, &t);
if (st & ios_base::failbit)
cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
else
cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") ="
<< "\ntm_sec: " << t.tm_sec
<< "\ntm_min: " << t.tm_min
<< "\ntm_hour: " << t.tm_hour
<< "\ntm_mday: " << t.tm_mday
<< "\ntm_mon: " << t.tm_mon
<< "\ntm_year: " << t.tm_year
<< "\ntm_wday: " << t.tm_wday
<< "\ntm_yday: " << t.tm_yday
<< "\ntm_isdst: " << t.tm_isdst
<< endl;
}
time_get(juillet) =
tm_sec: 0
tm_min: 0
tm_hour: 0
tm_mday: 0
tm_mon: 6
tm_year: 0
tm_wday: 0
tm_yday: 0
tm_isdst: 0
time_get::get_time
分析作为 strftime
的 X 说明符所生成日期的字符串。
iter_type get_time(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
未使用。
State
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储日期信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
成员函数返回 do_get_time(first
, last
, iosbase
, state
, ptm
)。
示例
// time_get_get_time.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
int main( )
{
locale loc;
basic_stringstream<char> pszGetF, pszPutF, pszGetI, pszPutI;
ios_base::iostate st = 0;
struct tm t;
memset( &t, 0, sizeof( struct tm ) );
pszGetF << "11:13:20";
pszGetF.imbue( loc );
basic_istream<char>::_Iter i = use_facet
<time_get <char> >
(loc).get_time(basic_istream<char>::_Iter(pszGetF.rdbuf( )),
basic_istream<char>::_Iter(0), pszGetF, st, &t);
if (st & ios_base::failbit)
cout << "time_get::get_time("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
else
cout << "time_get::get_time("<< pszGetF.rdbuf( )->str( )<< ") ="
<< "\ntm_sec: " << t.tm_sec
<< "\ntm_min: " << t.tm_min
<< "\ntm_hour: " << t.tm_hour
<< endl;
}
time_get::get_time(11:13:20) =
tm_sec: 20
tm_min: 13
tm_hour: 11
time_get::get_weekday
分析作为周日期名称的字符串。
iter_type get_weekday(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储的工作日信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
成员函数返回 do_get_weekday(first
, last
, iosbase
, state
, ptm
)。
示例
// time_get_get_weekday.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
int main( )
{
locale loc ( "French" );
basic_stringstream< char > pszGetF, pszPutF, pszGetI, pszPutI;
ios_base::iostate st = 0;
struct tm t;
memset( &t, 0, sizeof( struct tm ) );
pszGetF << "mercredi";
pszGetF.imbue(loc);
basic_istream<char>::_Iter i = use_facet
<time_get<char> >
(loc).get_weekday(basic_istream<char>::_Iter(pszGetF.rdbuf( )),
basic_istream<char>::_Iter(0), pszGetF, st, &t);
if (st & ios_base::failbit)
cout << "time_get::get_time("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
else
cout << "time_get::get_time("<< pszGetF.rdbuf( )->str( )<< ") ="
<< "\ntm_wday: " << t.tm_wday
<< endl;
}
time_get::get_time(mercredi) =
tm_wday: 3
time_get::get_year
分析作为年份名称的字符串。
iter_type get_year(iter_type first,
iter_type last,
ios_base& iosbase,
ios_base::iostate& state,
tm* ptm) const;
参数
first
确定待转换序列开头位置的输入迭代器。
last
确定待转换序列末尾位置的输入迭代器。
iosbase
一种格式标志,设定时表示货币符号是可选项;否则,它是必需项。
state
根据操作是否成功,设置流状态的相应位掩码元素。
ptm
指向要存储的年份信息的指针。
返回值
一个输入迭代器,确定第一个超出输入字段的元素位置。
备注
成员函数返回 do_get_year(first
, last
, iosbase
, state
, ptm
)。
示例
// time_get_get_year.cpp
// compile with: /EHsc
#include <locale>
#include <iostream>
#include <sstream>
#include <time.h>
using namespace std;
int main( )
{
locale loc;
basic_stringstream<char> pszGetF, pszPutF, pszGetI, pszPutI;
ios_base::iostate st = 0;
struct tm t;
memset( &t, 0, sizeof( struct tm ) );
pszGetF << "1928";
pszGetF.imbue( loc );
basic_istream<char>::_Iter i = use_facet
<time_get<char> >
(loc).get_year(basic_istream<char>::_Iter(pszGetF.rdbuf( )),
basic_istream<char>::_Iter(0), pszGetF, st, &t);
if (st & ios_base::failbit)
cout << "time_get::get_year("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
else
cout << "time_get::get_year("<< pszGetF.rdbuf( )->str( )<< ") ="
<< "\ntm_year: " << t.tm_year
<< endl;
}
time_get::get_year(1928) =
tm_year: 28
time_get::iter_type
一种类型,此类型描述输入迭代器。
typedef InputIterator iter_type;
注解
该类型是模板参数 InputIterator 的同义词。
time_get::time_get
time_get
类型的对象的构造函数。
explicit time_get(size_t refs = 0);
参数
refs
用于指定对象的内存管理类型的整数值。
备注
refs 参数可能的值及其含义:
0:对象的生存期由包含该对象的区域设置管理。
1:必须手动管理对象的生存期。
> 1:未定义这些值。
由于该析构函数受到保护,可能没有直接的示例。
构造函数通过 locale::facet(refs
) 初始化其基对象。