【问题标题】:Set string as current date [closed]将字符串设置为当前日期[关闭]
【发布时间】:2016-08-27 11:19:11
【问题描述】:

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

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

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

【问题讨论】:

  • 那有什么问题吗?
  • 使用std::ostringstream+ 不像你想象的那样工作。
  • @BenjaminBannier 我尝试打印它,它只是一个 E 符号
  • @πάνταῥεῖ 是的,我明白了,关键是它不起作用
  • @CameronLyall 什么不起作用特别有用?用法非常简单。

标签: c++ date time-t


【解决方案1】:

我会使用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);

【讨论】:

  • 对不起,我意识到我不是很清楚。我实际上想要做的是在文件名中写入日期。为此,我需要能够将其作为字符串。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多