我有这个C ++函数:
string date()
{
time_t seconds = time (NULL);
struct tm * timeinfo = localtime (&seconds);
ostringstream oss;
oss << (timeinfo->tm_year + 1900) << "-" << (timeinfo->tm_mon + 1) << "-" << timeinfo->tm_mday;
string data = oss.str();
return data;
}
问题是我想要0和0的月和日。它将返回'2013-6-1'而不是'2013-06-01'
我正试图用一些if和其他的方式做到这一点,但我没有得到任何地方..
你能帮我吗?
答案 0 :(得分:2)
您可以使用两个流修饰符std::setw
和std::setfill
进行适当的设置,例如,您可以将代码更改为:
string date()
{
time_t seconds = time (NULL);
struct tm * timeinfo = localtime (&seconds);
ostringstream oss;
oss << (timeinfo->tm_year + 1900) << "-" << std::setw(2) << std::setfill('0') << (timeinfo->tm_mon + 1) << "-" << std::setw(2) << std::setfill('0') << timeinfo->tm_mday;
string data = oss.str();
return data;
}
答案 1 :(得分:0)
你也可以use std::put_time,虽然没有在gcc 4.7中实现:
std::string date()
{
time_t seconds = time (NULL);
struct tm * timeinfo = localtime (&seconds);
std::ostringstream oss;
oss << std::put_time(&timeinfo, "%Y-%m-%d");
// or: oss << std::put_time(&timeinfo, "%F");
return oss.str();
}