将字符串设置为当前日期

时间:2016-05-02 16:02:34

标签: c++ date time-t

我需要编写名称中包含当前日期的文件。 目前这是我尝试过的:

    time_t t = time(0);
    struct tm * now = localtime(&t);
    string date=now->tm_mday+'/'+(now->tm_mon+1)+'/'+(now->tm_year+1900);

我希望保留这种获取日期的方法,就像我之前在我的程序中使用它一样。

2 个答案:

答案 0 :(得分:5)

我会使用std::put_time,如下所示:

time_t t = time(0);
struct tm * now = localtime(&t);

your_file << std::put_time(now, "%d/%m/%Y");

如果您的意思是需要在新文件的名称中包含日期,请写入字符串流,并使用your_stream.str()获取包含该值的字符串。

如果(虽然它让我觉得不太可能)你发现这会产生过多的开销,你可以使用strftime代替。它将日期/时间直接写入C风格的字符串:

char buffer[64];

strftime(buffer, sizeof(buffer), "%d/%m/%Y", now);

答案 1 :(得分:2)

我经常使用std::strftime这样:

// use strftime to format time_t into a "date time"
std::string get_date(std::time_t timer)
{
    char buf[sizeof("02/05/2015")]; // big enough for 02/05/2015\0
    std::tm tp = *std::localtime(&timer); // not thread safe
    return {buf, std::strftime(buf, sizeof(buf), "%d/%m/%Y", &tp)};
}

int main()
{
    std::cout << get_date(std::time(0)) << '\n';
}

<强>输出:

02/05/2016