# std::chrono::operator<< (std::chrono::duration)

< cpp‎ | chrono‎ | duration

定义于头文件 `<chrono>` |  |
template <class CharT, class Traits, class Rep, class Period> std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& os, const std::chrono::duration<Rep, Period>& d); |  | (C++20 起)

插入 `d` 的文本表示到 `os` 中，若 `CharT` 既非 char 亦非 wchar_t ，或若 `Rep` 既非浮点类型亦非转换等级大于或等于 short 的类型，则行为未定义。

表现如同它实现为

    std::basic_ostringstream<CharT, Traits> s;
    s.flags(os.flags());
    s.imbue(os.getloc());
    s.precision(os.precision());
    s << d.count() << units_suffix; // 见后述
    return os << s.str();

换言之，流标志、本地环境和精度由流确定，但用整个输出字符串确定任何填充。

`units_suffix` 基于按照下表的 `Period::type` 确定。

`Period::type` | 后缀
std::atto | `as`
std::femto | `fs`
std::pico | `ps`
std::nano | `ns`
std::micro | `µs` (U+00B5) 或 `us` ，使用何者是实现定义的
std::milli | `ms`
std::centi | `cs`
std::deci | `ds`
`std::ratio<1>` | `s`
std::deca | `das`
std::hecto | `hs`
std::kilo | `ks`
std::mega | `Ms`
std::giga | `Gs`
std::tera | `Ts`
std::peta | `Ps`
std::exa | `Es`
`std::ratio<60>` | `min`
`std::ratio<3600>` | `h`
`std::ratio<86400>` | `d`
非以上之一，且 Period::type::den == 1 | `[num]s`
非以上之一 | `[num/den]s`

对于表中最后二行，后缀中的 `num` 和 `den` 分别是格式化为不带前导零的 `Period::type::num` 和 `Period::type::den` 。

### 返回值

到流的引用，即 `os` 。

### 参阅

format (C++20) | 在新 string 中存储参数的格式化表示 (函数模板)
std::formatter<std::chrono::duration> (C++20) | std::formatter 的特化，按提供的格式格式化 `duration` (类模板特化)
operator<<operator>> | 执行字符串的流输入与输出 (函数模板)
to_string (C++11) | 转换整数或浮点值为 `string` (函数)
to_wstring (C++11) | 转换整数或浮点值为 `wstring` (函数)