将字符串设置为当前日期

Set string as current date

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

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

我最好保留这种获取日期的方法,因为我之前在我的程序中使用过它。

我会使用 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。它将 date/time 直接写入 C 风格的字符串:

char buffer[64];

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

我经常使用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[=10=]
    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