保存文件或文件夹的时间戳?

时间:2015-03-28 00:13:06

标签: c++ c++11

是否有更简单的方法来保存文件/创建目录作为日期时间戳? 只使用标准库(不是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();

1 个答案:

答案 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::timestd::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