2013-06-20 32 views
39

我一直在升级一些旧代码,并且试图在可能的情况下更新到C++ 11。下面的代码是我如何用我的程序使用std :: chrono在C++中输出日期和时间

#include <iostream> 
#include <string> 
#include <stdio.h> 
#include <time.h> 

const std::string return_current_time_and_date() const 
{ 
    time_t now = time(0); 
    struct tm tstruct; 
    char buf[80]; 
    tstruct = *localtime(&now); 
    strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct); 
    return buf; 
} 

显示时间和日期,我想使用std ::时辰(或类似)输出的当前时间和日期在类似的格式,但我不知道该如何去做这件事。任何帮助将不胜感激。谢谢

+0

请查询是否已经有这样一个问题,如果没有,然后问。 – legends2k

+0

*可能重复:* http://stackoverflow.com/questions/12346260/c-date-and-time – legends2k

+3

你不会用C++ 11好得多。 chrono更多的是与时间有关的东西(需要花费多长时间)。不过,您可以查看Boost Date Time。它具有更强大的日期和时间功能。 –

回答

63

<chrono>库只处理时间而不是日期,除了system_clock有能力将其时间点转换为time_t。因此,使用<chrono>进行日期并不会有太大的改进。希望我们能在不久的将来得到像chrono::date这样的东西。

也就是说,你可以通过以下方式使用<chrono>

#include <chrono> // chrono::system_clock 
#include <ctime> // localtime 
#include <sstream> // stringstream 
#include <iomanip> // put_time 
#include <string> // string 

std::string return_current_time_and_date() 
{ 
    auto now = std::chrono::system_clock::now(); 
    auto in_time_t = std::chrono::system_clock::to_time_t(now); 

    std::stringstream ss; 
    ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X"); 
    return ss.str(); 
} 

注意std::localtime可能会导致数据争。 localtime_r或类似的功能可能在您的平台上可用。

更新:

使用的霍华德Hinnant(欣南特)的date library一个新的版本,你可以写:

#include "date.h" 
#include <chrono> 
#include <string> 
#include <sstream> 

std::string return_current_time_and_date() { 
    auto now = std::chrono::system_clock::now(); 
    auto today = date::floor<days>(now); 

    std::stringstream ss; 
    ss << today << ' ' << date::make_time(now - today) << " UTC"; 
    return ss.str(); 
} 

这将打印出类似 “2015年7月24日05:15:34.043473124 UTC”。


在一个不相关的注释中,返回const对象对于C++ 11来说已经不合意了;常量返回值不能从中移出。我还删除了尾随const,因为尾随const仅对成员函数有效,并且此函数不需要是成员。

+7

请注意,一些旧的编译器可能不会识别'std :: put_time'。一旦我尝试使用g ++在CentOS 7上编译我的'std :: put_time'的代码,它就失败了。 GCC中'std :: put_time'支持的状态http://stackoverflow.com/q/14136833/4694036 – LETs

+2

真棒更新。 +1 ;-) –

+0

有没有类似于std :: put_time的C++函数,但返回字符串? – Nick

相关问题