68

我试图使用 GCC 编译这个示例程序(测试版本 4.5.1、4.6.3、4.8.4):

#include <iostream>
#include <iomanip>
#include <ctime>
#include <chrono>

using std::chrono::system_clock;

int main()
{
    system_clock::time_point now = system_clock::now();
    std::time_t now_c = system_clock::to_time_t(
                            now - std::chrono::hours(24));
    std::cout << "One day ago, the time was "
              << std::put_time(std::localtime(&now_c), "%F %T") << '\n';
}

但它告诉我:

prog.cpp: In function 'int main()':
prog.cpp:14:18: error: 'put_time' is not a member of 'std'

我想,可能它还没有实现。所以我试图检查这个函数的实现状态。我只找到了这个页面:

但在那里我找不到任何关于put_timechrono类似的注释。谁能指出我提供有关该库的实施状态信息的资源?

4

2 回答 2

81

请参阅gcc 4.8.0 的TODO 扩展 iomanip 操纵器 std::get_time 和 std:: put_time。

另请参阅获取时间的跨平台方式?声称未在 4.7.0 中实现。


更新:正如 gcc 开发人员Jonathan Wakely 在下面确认的那样:gcc 4.9 中仍然缺少std::get_time和操纵器。std::put_time


更新: Jonathan Wakely于2014 年 12 月 22 日关闭了这张票:

已为 GCC 5 修复

感谢simonwo让我知道这件事。

于 2013-01-03T10:44:49.437 回答
20

您可能已经注意到您提供的链接没有列出图书馆的任何部分!但在表格下方它说:

可以在此表中跟踪库实现的状态

该表指出std::get_timestd::put_time操纵器尚未实现。

编辑:put_time现在在 GCC 开发主干上。

于 2013-01-03T15:52:29.493 回答