465 lines
40 KiB
HTML
465 lines
40 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::time_get<CharT,InputIt>::get, std::time_get<CharT,InputIt>::do_get</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_locale_time_get_get skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::time_get<CharT,InputIt>::</span>get, <span style="font-size:0.7em; line-height:130%">std::time_get<CharT,InputIt>::</span>do_get</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-locale.html">locale</a>‎ | <a href="cpp-locale-time_get.html">time get</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-locale.html"><locale></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx11">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">public</span><span class="sy4">:</span><br /></span>
|
|
<p>iter_type get<span class="br0">(</span>iter_type beg, iter_type end, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> str,<br />
|
|
<a href="cpp-io-ios_base-iostate.html"><span class="kw1697">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">iostate</span></span></a><span class="sy3">&</span> err, <a href="cpp-chrono-c-tm.html"><span class="kw1023">std::<span class="me2">tm</span></span></a><span class="sy2">*</span> t,<br /></p>
|
|
<span class="kw4">const</span> char_type<span class="sy2">*</span> fmtbeg, <span class="kw4">const</span> char_type<span class="sy2">*</span> fmtend<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(1)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl t-since-cxx11">
|
|
<td>
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw1">protected</span><span class="sy4">:</span><br /></span>
|
|
<p><span class="kw1">virtual</span> iter_type do_get<span class="br0">(</span>iter_type beg, iter_type end, <a href="cpp-io-ios_base.html"><span class="kw1669">std::<span class="me2">ios_base</span></span></a><span class="sy3">&</span> str,<br />
|
|
<a href="cpp-io-ios_base-iostate.html"><span class="kw1697">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">iostate</span></span></a><span class="sy3">&</span> err, <a href="cpp-chrono-c-tm.html"><span class="kw1023">std::<span class="me2">tm</span></span></a> <span class="sy2">*</span>t,<br /></p>
|
|
<span class="kw4">char</span> format, <span class="kw4">char</span> modifier<span class="br0">)</span> <span class="kw4">const</span><span class="sy4">;</span></div>
|
|
</td>
|
|
<td>(2)</td>
|
|
<td><span class="t-mark-rev t-since-cxx11">(C++11 起)</span></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<div class="t-li1"><span class="t-li">1)</span> 按照字符序列 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="br0">[</span>fmtbeg, fmtend<span class="br0">)</span></span></span> 中提供的格式,从输入字符序列 <code>[beg, end)</code> 分析日期和时间。期待格式遵循描述于下的格式,尽管能通过覆写 <code>do_get</code> 定制每个格式指定符的实际处理。 <code>get</code> 函数进行下列内容: 首先,通过执行 <span class="t-c"><span class="mw-geshi cpp source-cpp">err <span class="sy1">=</span> <a href="cpp-io-ios_base-iostate.html"><span class="kw1698">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">goodbit</span></span></a></span></span> 清除 <code>err</code> 中的错误位。然后进入循环,凡在任何下列条件变为真时循环终止(以此顺序检查):</div>
|
|
<div class="t-li2"><span class="t-li">a)</span> 已从格式字符串读取全部字符( <span class="t-c"><span class="mw-geshi cpp source-cpp">fmtbeg <span class="sy1">==</span> fmtend</span></span> )</div>
|
|
<div class="t-li2"><span class="t-li">b)</span> 有分析错误( <span class="t-c"><span class="mw-geshi cpp source-cpp">err <span class="sy3">!</span><span class="sy1">=</span> <a href="cpp-io-ios_base-iostate.html"><span class="kw1698">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">goodbit</span></span></a></span></span> )</div>
|
|
<div class="t-li2"><span class="t-li">c)</span> 已从输入序列读取全部字符( <span class="t-c"><span class="mw-geshi cpp source-cpp">beg <span class="sy1">==</span> end</span></span> )。若此条件终止循环,则函数于 <code>err</code> 中一同设置 <code>eofbit</code> 和 <code>failbit</code> 。</div>
|
|
<dl>
|
|
<dd>
|
|
<dl>
|
|
<dd>循环体中,发生下列步骤:</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
<div class="t-li2"><span class="t-li">a)</span> 若格式字符串中的下个字符为 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%'</span></span></span> ,后随一或二个组成合法 <span class="t-lc"><a href="cpp-io-manip-get_time.html">std::get_time</a></span> 转换指定符的字符(见下方),则将这些字符用于调用 <span class="t-c"><span class="mw-geshi cpp source-cpp">do_get<span class="br0">(</span>beg, end, str, err, t, format, modifier<span class="br0">)</span></span></span> ,其中 <code>format</code> 为初等转换指定符字符,而 <code>modifier</code> 为可选的修饰符(若存在,则出现于 <code>%</code> 和格式字符间)。若无修饰符,则使用值 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'<span class="es5">\0</span>'</span></span></span> 。若格式字符串有歧义,或过早结束而无以确定 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%'</span></span></span> 后的转换指定符,则在 <code>err</code> 中设置 <code>eofbit</code> 并终止循环。若调用 <code>do_get</code> 后 <code>err</code> 中未设置错误位,则函数增加 <code>fmtbeg</code> 到正好指向转换指定符之后,并持续循环。</div>
|
|
<div class="t-li2"><span class="t-li">b)</span> 若下个字符为流 <code>str</code> 中提供的 locale 所指示的空白符(即 <span class="t-c"><span class="mw-geshi cpp source-cpp">std<span class="sy4">::</span><span class="me2">isspace</span><span class="br0">(</span><span class="sy2">*</span>fmtbeg, str.<span class="me1">getloc</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span> <span class="sy1">==</span> <span class="kw2">true</span></span></span> ),则函数保持自增 <code>fmtbeg</code> 直至它变为等于 <code>fmtend</code> 或指向非空白字符。</div>
|
|
<div class="t-li2"><span class="t-li">c)</span> 若格式字符串中的下个字符按照大小写无关比较,等价于输入流中的下个字符,则函数令二个序列一同前进一个字符 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">++</span>fmtbeg, <span class="sy2">++</span>beg<span class="sy4">;</span></span></span> 并持续循环。否则它设置 <code>err</code> 中的 <code>failbit</code> 。</div>
|
|
<div class="t-li1"><span class="t-li">2)</span> 从输入序列 <code>[beg, end)</code> 分析一个格式指定符并按照它更新 <code>t</code> 所指向的 <span class="t-lc"><a href="cpp-chrono-c-tm.html">std::tm</a></span> 结构体。</div>
|
|
<dl>
|
|
<dd>
|
|
<dl>
|
|
<dd>首先,通过执行 <span class="t-c"><span class="mw-geshi cpp source-cpp">err <span class="sy1">=</span> <a href="cpp-io-ios_base-iostate.html"><span class="kw1698">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">goodbit</span></span></a></span></span> 清除 <code>err</code> 中所有错误位。然后从 <code>[beg, end)</code> 读取 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%'</span></span></span> 、 <code>modifier</code> (若非 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'<span class="es5">\0</span>'</span></span></span> )及 <code>format</code> 所组成的 <span class="t-lc"><a href="cpp-locale-time_get.html">std::time_get</a></span> 格式指定符所期待的字符。若字符不组成合法转换指定符,则设置 <code>err</code> 中的 <code>failbit</code> 。若读取一个字符后抵达输入流尾,则设置 <code>err</code> 中的 <code>eofbit</code> 。若成功分析输入字符串,则更新 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>t</span></span> 的对应域。</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
<dl>
|
|
<dd>
|
|
<dl>
|
|
<dd>对于复合转换指定符,如 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%x'</span></span></span> 或 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%c'</span></span></span> ,或使用修饰符 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'E'</span></span></span> 和 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'O'</span></span></span> 的指令,函数可能无法确定存储于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>t</span></span> 的某些值。该情况下设置 <code>err</code> 中的 <code>eofbit</code> ,并将这些域留在未指定状态。</dd>
|
|
</dl>
|
|
</dd>
|
|
</dl>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">参数</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>beg</td>
|
|
<td>-</td>
|
|
<td>指代要分析的序列起始的迭代器</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>end</td>
|
|
<td>-</td>
|
|
<td>要分析的序列的尾后一位置迭代器</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>str</td>
|
|
<td>-</td>
|
|
<td>此函数在需要时用以获得 locale 平面的流对象,例如用 <span class="t-lc"><a href="cpp-locale-ctype.html">std::ctype</a></span> 跳过空白符或用 <span class="t-lc"><a href="cpp-locale-collate.html">std::collate</a></span> 比较字符串</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>err</td>
|
|
<td>-</td>
|
|
<td>此函数所修改以指示错误的流错误标志对象</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>t</td>
|
|
<td>-</td>
|
|
<td>指向 <span class="t-lc"><a href="cpp-chrono-c-tm.html">std::tm</a></span> 对象的指针,该对象将保有此函数调用结果</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>fmtbeg</td>
|
|
<td>-</td>
|
|
<td>指向指定转换格式的 char_type 字符序列首字符的指针
|
|
<p>格式字符串由零或更多转换说明符、空白符和通常字符(除了 <code>%</code> )组成。期待每个通常字符以大小无关比较匹配输入流中的一个字符。每个空白符匹配输入字符串中的任意空白符。每个转换说明始于 <code>%</code> 字符,可选地后随 <code>E</code> 或 <code>O</code> 修饰符(若本地环境不支持则忽略),后随确定说明符转换行为的字符。格式说明符匹配 POSIX 函数 <a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html">strptime()</a> :</p>
|
|
<table class="wikitable" style="font-size:85%; max-width:90em;">
|
|
<tr>
|
|
<th>转换指定符</th>
|
|
<th>解释</th>
|
|
<th>写入域</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>%</code></th>
|
|
<td>匹配字面 <code>%</code> 。完整转换说明必须是 <code>%%</code> 。</td>
|
|
<td>(无)</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>t</code></th>
|
|
<td>匹配任何空白符。</td>
|
|
<td>(无)</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>n</code></th>
|
|
<td>匹配任何空白符。</td>
|
|
<td>(无)</td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">年</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Y</code></th>
|
|
<td>分析完整<b>年</b>为四位十进制数,容许但不要求前导零</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>EY</code></th>
|
|
<td>以替用表示分析<b>年</b>,例如 平成23年 在 ja_JP 本地环境中写 2011 到 tm_year</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>y</code></th>
|
|
<td>分析<b>年</b>的后二位为十进制数。范围 <code>[69,99]</code> 生成 1969 至 1999 的值,范围 <code>[00,68]</code> 生成 2000-2068</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Oy</code></th>
|
|
<td>以替用数值系统分析<b>年</b>的后二位数字,例如 十一 在 ja_JP 本地环境中被分析为 11</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Ey</code></th>
|
|
<td>分析<b>年</b>为从本地环境的替用日历周期 <code>%EC</code> 的偏移</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>C</code></th>
|
|
<td>分析<b>年</b>的首 2 位数字为十进制数(范围 <code>[00,99]</code> )</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>EC</code></th>
|
|
<td>分析本地环境的替用表示中,年基底(周期)的名称,例如 ja_JP 中的 平成</td>
|
|
<td><code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">月</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>b</code></th>
|
|
<td>分析月份名,完整或缩写,例如 <code>Oct</code></td>
|
|
<td><code><b>tm_mon</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>h</code></th>
|
|
<td><code>b</code> 的同义词</td>
|
|
<td><code><b>tm_mon</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>B</code></th>
|
|
<td><code>b</code> 的同义词</td>
|
|
<td><code><b>tm_mon</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>m</code></th>
|
|
<td>分析<b>月</b>为十进制数(范围 <code>[01,12]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_mon</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Om</code></th>
|
|
<td>用替代数值系统分析<b>月</b>,例如 ja_JP 本地环境中 十二 分析为 12</td>
|
|
<td><code><b>tm_mon</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">星期</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>U</code></th>
|
|
<td>分析<b>年之星期</b>为十进制数(星期日是星期的首日)(范围 <code>[00,53]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_year</b></code>, <code><b>tm_wday</b></code>, <code><b>tm_yday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OU</code></th>
|
|
<td>用替用数值系统,如以 <code>%U</code> 一般分析<b>年之星期</b>,例如 ja_JP 本地环境中 五十二 分析为 52</td>
|
|
<td><code><b>tm_year</b></code>, <code><b>tm_wday</b></code>, <code><b>tm_yday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>W</code></th>
|
|
<td>分析<b>年之星期</b>为十进制数(星期一是星期的首日)(范围 <code>[00,53]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_year</b></code>, <code><b>tm_wday</b></code>, <code><b>tm_yday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OW</code></th>
|
|
<td>用替用数值系统,如以 <code>%W</code> 一般分析<b>年之星期</b>,例如 ja_JP 本地环境中 五十二 分析为 52</td>
|
|
<td><code><b>tm_year</b></code>, <code><b>tm_wday</b></code>, <code><b>tm_yday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">年/月之日</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>j</code></th>
|
|
<td>分析<b>年之日</b>为十进制数(范围 <code>[001,366]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_yday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>d</code></th>
|
|
<td>分析<b>月之日</b>为十进制数(范围 <code>[01,31]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_mday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Od</code></th>
|
|
<td>用替用数值系统分析<b>月之日</b>,例如 ja_JP 本地环境中 二十七 分析为 27 ,容许但不要求前导零</td>
|
|
<td><code><b>tm_mday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>e</code></th>
|
|
<td><code>d</code> 的同义词</td>
|
|
<td><code><b>tm_mday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Oe</code></th>
|
|
<td><code>Od</code> 的同义词</td>
|
|
<td><code><b>tm_mday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">星期之日</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>a</code></th>
|
|
<td>分析星期的日名,完整或缩写版,例如 <code>Fri</code></td>
|
|
<td><code><b>tm_wday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>A</code></th>
|
|
<td><code>a</code> 的同义词</td>
|
|
<td><code><b>tm_wday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>w</code></th>
|
|
<td>分析<b>星期之日</b>为十进制数,其中星期日为 <code>0</code> (范围 <code>[0-6]</code> )</td>
|
|
<td><code><b>tm_wday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Ow</code></th>
|
|
<td>用替用数值系统分析<b>星期之日</b>为十进制数,其中星期日为 <code>0</code> ,例如 ja_JP 本地环境中 二 分析为 2</td>
|
|
<td><code><b>tm_wday</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">时、分、秒</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>H</code></th>
|
|
<td>分析<b>时</b>为十进制数,以 24 小时时钟(范围 <code>[00,23]</code> ) ,容许但不要求前导零</td>
|
|
<td><code><b>tm_hour</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OH</code></th>
|
|
<td>用替用数值系统分析来自 24 小时时钟的<b>时</b>,例如 ja_JP 本地环境中 十八 分析为 18</td>
|
|
<td><code><b>tm_hour</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>I</code></th>
|
|
<td>分析<b>时</b>为十进制数,以 12 小时时钟(范围 <code>[01,12]</code> ) ,容许但不要求前导零</td>
|
|
<td><code><b>tm_hour</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OI</code></th>
|
|
<td>用替用数值系统分析<b>时</b>,例如 ja_JP 本地环境中 六 分析为 6</td>
|
|
<td><code><b>tm_hour</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>M</code></th>
|
|
<td>分析<b>分</b>为十进制数(范围 <code>[00,59]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_min</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OM</code></th>
|
|
<td>用替用数值系统分析<b>分</b>,例如 ja_JP 本地环境中 二十五 分析为 25</td>
|
|
<td><code><b>tm_min</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>S</code></th>
|
|
<td>分析<b>秒</b>为十进制数(范围 <code>[00,60]</code> ),容许但不要求前导零</td>
|
|
<td><code><b>tm_sec</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>OS</code></th>
|
|
<td>用替用数值系统分析<b>秒</b>,例如 ja_JP 本地环境中 二十四 分析为 24</td>
|
|
<td><code><b>tm_sec</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th colspan="3">其他</th>
|
|
</tr>
|
|
<tr>
|
|
<th><code>c</code></th>
|
|
<td>分析本地环境的标准日期和时间字符串格式,例如 <code>Sun Oct 17 04:41:13 2010</code> (本地环境依赖)</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Ec</code></th>
|
|
<td>分析本地环境的替用时期和时间字符串格式,例如期待在 ja_JP 本地环境中以 平成23年 取代 2011年</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>x</code></th>
|
|
<td>分析本地环境的标准日期表示</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>Ex</code></th>
|
|
<td>分析本地环境的替用日期表示,例如期待在 ja_JP 本地环境中以 平成23年 取代 2011年</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>X</code></th>
|
|
<td>分析本地环境的标准时间表示</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>EX</code></th>
|
|
<td>分析本地环境的替用时间表示</td>
|
|
<td>所有</td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>D</code></th>
|
|
<td>等价于 <b>"%m / %d / %y "</b></td>
|
|
<td><code><b>tm_mon</b></code>, <code><b>tm_mday</b></code>, <code><b>tm_year</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>r</code></th>
|
|
<td>等价于本地环境的标准 12 小时时钟时间( POSIX 中为 <b>"%I : %M : %S %p"</b> )</td>
|
|
<td><code><b>tm_hour</b></code>, <code><b>tm_min</b></code>, <code><b>tm_sec</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>R</code></th>
|
|
<td>等价于 <b>"%H : %M"</b></td>
|
|
<td><code><b>tm_hour</b></code>, <code><b>tm_min</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>T</code></th>
|
|
<td>等价于 <b>"%H : %M : %S"</b></td>
|
|
<td><code><b>tm_hour</b></code>, <code><b>tm_min</b></code>, <code><b>tm_sec</b></code></td>
|
|
</tr>
|
|
<tr>
|
|
<th><code>p</code></th>
|
|
<td>分析 <b>a.m. 或 p.m.</b> 的本地环境等价版本</td>
|
|
<td><code><b>tm_hour</b></code></td>
|
|
</tr>
|
|
</table>
|
|
<p>注意:不写入 <code>tm_isdst</code> ,需要用如 <code>mktime</code> 的函数显式设置它。</p>
|
|
<p><br /></p>
|
|
</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>fmtend</td>
|
|
<td>-</td>
|
|
<td>指定转换格式的 char_type 字符序列的末字符后一位置指针</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>format</td>
|
|
<td>-</td>
|
|
<td>指名转换指定符的字符</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>modifier</td>
|
|
<td>-</td>
|
|
<td>可出现于 <code>%</code> 和转换指定符间的可选修饰符</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
|
<p>指向 <code>[beg, end)</code> 中成功分析的末字符后一位置的迭代器。</p>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E6.84.8F">注意</span></h3>
|
|
<p>格式字符串中非空白非 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="st0">'%'</span></span></span> 字符的大小写无关比较,不要求,但典型地使用 <code>str</code> 所提供的 locale 的 <span class="t-lc"><a href="cpp-locale-collate.html">std::collate</a></span> 平面。</p>
|
|
<p>若遇到分析错误,则此函数的多数实现完全不接触 <code>*t</code> 。</p>
|
|
<p>这些函数是否清零 <span class="t-c"><span class="mw-geshi cpp source-cpp"><span class="sy2">*</span>t</span></span> 中其所不直接设置的域是实现定义的:可移植程序应在调用 <code>get()</code> 前初始化每个域为零。</p>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <iostream></span>
|
|
<span class="co2">#include <sstream></span>
|
|
<span class="co2">#include <locale></span>
|
|
<span class="co2">#include <iomanip></span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<a href="cpp-io-basic_istringstream.html"><span class="kw1735">std::<span class="me2">istringstream</span></span></a> ss<span class="br0">(</span><span class="st0">"2011-Februar-18 23:12:34"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ss.<span class="me1">imbue</span><span class="br0">(</span><a href="cpp-locale-locale.html"><span class="kw1894">std::<span class="me2">locale</span></span></a><span class="br0">(</span><span class="st0">"de_DE.utf8"</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
|
|
<span class="kw4">auto</span><span class="sy3">&</span> f <span class="sy1">=</span> <a href="cpp-locale-use_facet.html"><span class="kw1897">std::<span class="me2">use_facet</span></span></a><span class="sy1"><</span><a href="cpp-locale-time_get.html"><span class="kw1949">std::<span class="me2">time_get</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">>></span><span class="br0">(</span><a href="cpp-locale-locale.html"><span class="kw1894">std::<span class="me2">locale</span></span></a><span class="br0">(</span><span class="st0">"de_DE.utf8"</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-chrono-c-tm.html"><span class="kw1023">std::<span class="me2">tm</span></span></a> t<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<a href="cpp-string-basic_string.html"><span class="kw1230">std::<span class="me2">string</span></span></a> s <span class="sy1">=</span> <span class="st0">"%Y-%b-%d %H:%M:%S"</span><span class="sy4">;</span>
|
|
<a href="cpp-io-ios_base-iostate.html"><span class="kw1697">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">iostate</span></span></a> err <span class="sy1">=</span> <a href="cpp-io-ios_base-iostate.html"><span class="kw1698">std::<span class="me2">ios_base</span><span class="sy4">::</span><span class="me2">goodbit</span></span></a><span class="sy4">;</span>
|
|
<span class="kw4">auto</span> ret <span class="sy1">=</span> f.<span class="me1">get</span><span class="br0">(</span><span class="br0">{</span>ss<span class="br0">}</span>, <span class="br0">{</span><span class="br0">}</span>, ss, err, <span class="sy3">&</span>t, <span class="sy3">&</span>s<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span>, <span class="sy3">&</span>s<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span> <span class="sy2">+</span> s.<span class="me1">size</span><span class="br0">(</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
ss.<span class="me1">setstate</span><span class="br0">(</span>err<span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-iterator-istreambuf_iterator.html"><span class="kw669">std::<span class="me2">istreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span> last<span class="br0">{</span><span class="br0">}</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span><span class="br0">(</span>ss<span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"Successfully parsed as "</span> <span class="sy1"><<</span> <a href="cpp-io-manip-put_time.html"><span class="kw1801">std::<span class="me2">put_time</span></span></a><span class="br0">(</span><span class="sy3">&</span>t, <span class="st0">"%c"</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="kw1">if</span><span class="br0">(</span>ret <span class="sy3">!</span><span class="sy1">=</span> last<span class="br0">)</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">" Remaining content: "</span><span class="sy4">;</span>
|
|
<a href="cpp-algorithm-copy.html"><span class="kw1582">std::<span class="me2">copy</span></span></a><span class="br0">(</span>ret, last, <a href="cpp-iterator-ostreambuf_iterator.html"><span class="kw671">std::<span class="me2">ostreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">" The input was fully consumed"</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">"Parse failed. Unparsed string: "</span><span class="sy4">;</span>
|
|
<a href="cpp-algorithm-copy.html"><span class="kw1582">std::<span class="me2">copy</span></span></a><span class="br0">(</span>ret, last, <a href="cpp-iterator-ostreambuf_iterator.html"><span class="kw671">std::<span class="me2">ostreambuf_iterator</span></span></a><span class="sy1"><</span><span class="kw4">char</span><span class="sy1">></span><span class="br0">(</span><a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span>
|
|
<a href="cpp-io-cout.html"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">Successfully parsed, as Sun Feb 18 23:12:34 2011 The input was fully consumed</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-io-manip-get_time.html"><span class="t-lines"><span>get_time</span></span></a></div>
|
|
<div><span class="t-lines"><span><span class="t-mark-rev t-since-cxx11">(C++11)</span></span></span></div>
|
|
</div>
|
|
</td>
|
|
<td>剖析指定格式的日期/时间值<br />
|
|
<span class="t-mark">(函数模板)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|