public member function
<locale>

std::time_put::put

iter_type put (iter_type s, ios_base& str, char_type fill, const tm* t,               const char_type* pattern, const char_type* pat_end) const;iter_type put (iter_type s, ios_base& str, char_type fill, const tm* t,               char format, char modifier = 0) const;
写出时间和日期
将指向 tm 结构的 t 的时间值格式化为字符序列。

该函数将格式化操作产生的字符写入由 s 指向的序列的第一个字符。

函数返回一个指向输出序列中最后一个写入元素之后一个位置的迭代器。

(1) 单个格式说明符
此版本简单地调用虚保护成员 do_put,该成员默认产生的序列与使用由百分号('%')后跟参数 format 组成的字符串(当 modifier 不为零时可选地插入)通过 strftime 产生的序列相同。
(2) 格式字符串
此版本顺序写入范围 [fmt_begin,fmt_end) 中的字符,并将任何 格式说明符(如同被 C 函数 strftime 识别的那样)替换为通过调用虚保护成员 do_put 并传入适当的参数(将 说明符 和可选的 修饰符 作为最终参数)的结果。

有关说明符的更多详细信息,请参阅 strftime 的参考。

该函数使用 str 的区域设置的 ctype 方面将序列中的字符(如有必要)窄化char

参数

s
指向输出序列第一个字符的迭代器。
该序列应足够大以容纳整个表达式。
成员类型 iter_type 是方面(facet)的迭代器类型(定义为 time_put 的第二个模板参数 OutputIterator 的别名)。默认情况下,这是一个 ostreambuf_iterator,允许从 basic_ostream 对象隐式转换。
str
派生自 ios_base 的类的对象(通常是 *输出流对象*)。它仅用于获取格式化信息(此函数不会向此流写入任何内容)。
fill
*填充字符*。当格式需要字符填充时,*填充字符* 在输出插入操作中用于填充空格。
成员类型 char_type 是方面(facet)的字符类型(定义为 time_put 的第一个模板参数 charT 的别名)。
t
指向类型为 struct tm 的对象的指针(在头文件 <ctime> 中定义),其数据将被格式化。
pattern, pat_end
指向模式序列(*格式字符串*)的开始和结束字符的指针。
这些字符将被写入到 s 中,除了 *格式标签*(如 strftime 所识别的)之外,它们将在被写入之前替换为它们对应的日期时间表达式。
使用的范围是 [pattern,pat_end),它包含 patternpat_end 之间的所有字符,包括 pattern 指向的字符,但不包括 pat_end 指向的字符。
请注意,*空字符*(如果存在)也会被写入,并且函数在找到它们时不会停止,而是继续处理它们。
成员类型 char_type 是方面(facet)的字符类型(定义为 time_put 的第一个模板参数 charT 的别名)。
format
单个格式说明符;对于 do_put 的默认实现,这应该是 strftime 接受的说明符之一。
modifier
某些实现允许对说明符进行格式修饰。
值为 0'\0')表示没有修饰符。

返回值

最后写入字符之后的序列中的下一个字符。
成员类型 iter_type 是方面(facet)的迭代器类型(定义为 time_put 的第二个模板参数 OutputIterator 的别名)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// time_put example
// time_put::put example
#include <iostream>       // std::cout
#include <string>         // std::string
#include <ctime>          // std::time, std::localtime, std::tm, std::time_t
#include <locale>         // std::locale, std::time_put, std::use_facet

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

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

  std::time_t timestamp;
  std::time ( &timestamp );
  std::tm * now = std::localtime ( &timestamp );

  // using pattern string:
  std::string pattern ("Now it's: %I:%M%p\n");
  tmput.put (std::cout, std::cout, ' ', now, pattern.data(), pattern.data()+pattern.length());

  // using single specifier:
  std::cout << "Now it's: ";
  tmput.put (std::cout, std::cout, ' ', now, 'X');
  std::cout << '\n';
  return 0;
}

输出

Now it's: 12:29PM
Now it's: 12:29:08


数据竞争

会访问方面对象、t 指向的对象以及 patternpat_end 之间的范围。
指向 s 的序列将被修改。

异常安全

如果抛出异常,*方面对象* 不会有任何更改,尽管某些参数可能已被影响。

另见