0

我有这个 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 的月份和日期。它返回 '2013-6-1' 而不是 '2013-06-01'

我试图用一些 if 和 else 来解决这个问题,但我没有得到任何地方..

请你帮助我好吗?

4

2 回答 2

2

您可以使用两个流修饰符std::setwstd::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;
}
于 2013-06-01T21:22:47.240 回答
0

您也可以使用 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();
}
于 2013-06-01T21:30:42.160 回答