<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仅对成员函数有效,并且此函数不需要是成员。
请查询是否已经有这样一个问题,如果没有,然后问。 – legends2k
*可能重复:* http://stackoverflow.com/questions/12346260/c-date-and-time – legends2k
你不会用C++ 11好得多。 chrono更多的是与时间有关的东西(需要花费多长时间)。不过,您可以查看Boost Date Time。它具有更强大的日期和时间功能。 –