public member function
<locale>

std::time_get::get_date

iter_type get_date (iter_type s, iter_type end, ios_base& str,                    ios_base::iostate& err, tm* t) const;
读取日期
解析 send 之间的字符序列以获取日期序列,并将其值存储到 t 指向的 tm 对象中。

该函数读取字符,直到读取的字符不能构成有效的日期序列表达式,或者到达 end。序列中的下一个字符由函数返回的迭代器指向。

如果成功,该函数将设置 tm 结构体 t 的相关成员。其余成员将保持不变。

在内部,此函数仅调用虚保护成员 do_get_date,该成员默认按照与 strftime 中的 "%x" 相同的格式解析字符。

必要时,该函数会更新 err 以反映操作结果。
- 如果序列格式无效,函数将设置 failbit
- 否则,这是未定义的,尽管某些实现会将 err 设置为 eofbit(如果函数耗尽了字符序列,即无论成功还是失败都到达了 end),或者设置为 goodbit
在内部,此函数仅调用虚保护成员 do_get_date,该成员默认按照与 date_order 成员的返回值相关的格式进行解析。
date_order()get_date 的格式
no_orderstrftime 中的 "%m%d%y"
dmystrftime 中的 "%d%m%y"
mdystrftime 中的 "%m%d%y"
ymdstrftime 中的 "%y%m%d"
ydmstrftime 中的 "%y%d%m"

必要时,该函数会更新 err 以反映操作结果。
- 如果序列格式无效,函数将设置 failbit
- 如果函数在操作过程中耗尽了字符序列(即到达 end),则会设置 eofbit(单个操作可能会同时设置 failbiteofbit)。
- 否则,行为是未定义的,尽管某些实现会将 err 设置为 goodbit

参数

s, end
指向序列开始和结束字符的迭代器。范围是 [s,end),其中包含 s 指向的字符和 end 指向的字符之间的所有字符,但不包括 end 指向的字符。
成员类型 iter_type 是该 facet 的迭代器类型(定义为 time_get 的第二个模板参数 InputIterator 的别名)。默认情况下,这是一个 istreambuf_iterator,允许从 basic_istream 对象隐式转换。
str
派生自 ios_base 的类对象(通常是输入流对象)。它仅用于获取格式信息。
err
流错误状态对象,类型为 ios_base::iostate,用于存储错误状态。
t
指向 struct tm (在头文件 <ctime> 中定义)的指针,其成员在成功调用此成员函数后会被设置。

返回值

在操作之后,序列中紧随最后一个被使用字符的下一个字符。
成员类型 iter_type 是此 facet 的迭代器类型(定义为 time_get 的第二个模板参数 InputIterator 的别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// time_get::get_date example
#include <iostream>       // std::cout, std::ios
#include <sstream>        // std::istringstream
#include <ctime>          // std::tm
#include <locale>         // std::locale, std::time_get, std::use_facet

int main ()
{
  std::locale loc;        // classic "C" locale

  // get time_get facet:
  const std::time_get<char>& tmget = std::use_facet <std::time_get<char> > (loc);

  std::ios::iostate state;
  std::istringstream iss ("01/02/03");
  std::tm when;

  tmget.get_date (iss, std::time_get<char>::iter_type(), iss, state, &when);

  std::cout << "year: " << when.tm_year << '\n';
  std::cout << "month: " << when.tm_mon << '\n';
  std::cout << "day: " << when.tm_mday << '\n';
  return 0;
}

输出

year: 3
month: 0
day: 2

请注意,在经典区域设置中,日期顺序mdyno_order,而在 tmtm_mon 成员中,第一个月(一月)的值始终为 0tm_year 的值为 3 表示 1903 年(2003 年表示为 103)。

数据竞争

访问该对象以及 send 之间的整个范围。
参数 strerrt 可能会被修改。

异常安全

如果抛出异常,*facet 对象*不会发生任何更改,尽管某些参数可能会受到影响。

另见