是否有更简单的方法来保存文件/创建目录作为日期时间戳? 只使用标准库(不是boost)。有没有更快的方法呢?
这是我目前的代码
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
std::time_t tt = std::chrono::system_clock::to_time_t(now);
tm utc_tm = *gmtime(&tt);
oname.str("");
oname << (utc_tm.tm_year + 1900) << '-' << std::setfill('0') << std::setw(2) << (utc_tm.tm_mon + 1) << '-' << std::setfill('0') << std::setw(2) << utc_tm.tm_mday << " " << std::setfill('0') << std::setw(2)<< utc_tm.tm_hour <<':' << std::setfill('0') << std::setw(2) << utc_tm.tm_min <<':' << std::setfill('0') << std::setw(2) << utc_tm.tm_sec;
ts = oname.str();
答案 0 :(得分:1)
有一种不那么曲折的方式:
#include <string>
#include <ctime>
std::string get_timestamp()
{
auto now = std::time(nullptr);
char buf[sizeof("YYYY-MM-DD HH:MM:SS")];
return std::string(buf,buf +
std::strftime(buf,sizeof(buf),"%F %T",std::gmtime(&now)));
}
它很可能也更快,因为它不那么曲折,但那就是 在光盘I / O正在运行的环境中也非常重要。
这为您提供了与您自己的代码相同的时间戳,例如
2015-03-28 10:48:45
见std::time
和
std::strftime
来
了解如何实现所需的格式,并注意std::strftime
返回它所组成的字符串的长度,不包括它的nul-terminator。
此代码是标准代码,但如果您正在使用MS VC ++ 2013或更高版本
你也可以考虑使用std::put_time
,
如:
#include <iomanip>
#include <sstream>
#include <string>
#include <ctime>
std::string get_timestamp()
{
auto now = std::time(nullptr);
std::ostringstream os;
os << std::put_time(std::gmtime(&now),"%F %T");
return os.str();
}
哪个更简单。 (我没有测试过。)std::put_time
然而
自4.9以来,gcc不支持。
您希望将时间戳格式设置为YYYY-MM-DD HH:MM:SS
。如果他们
要在文件名中使用,保持它们没有空格会更为谨慎:
也许YYYY-MM-DD_HH:MM:SS
。