【发布时间】:2014-09-09 18:05:12
【问题描述】:
我正在编写代码以在工作中为我们的 Web 服务器自动编写标记,但我在尝试使用 <ctime> 标头中的 strftime() 在文本文件中实现自动日期插入时遇到了麻烦。以下是相关代码:
if (yen(raw_input))
{
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
strftime(buf, 10, "%F", timeinfo);
strftime(cuf, 60, "%B %d, %Y", timeinfo);
date = buf;
longdate = cuf;
}
...
ofstream mark;
const string filename = name + date + ".txt";
mark.open(filename);
mark << "{s5_mp3}http://www.####DELETED####.org/media/s5_mp3/" << date << "_" << name_cf << "_Sermon.mp3" << "{\s5_mp3}\n";
mark << hon << " " << name << ": ";
if (is_series) {mark << series << ": ";}
mark << title << "\n";
mark << verse << "\n" << longdate << "\n\0";
mark.close();
第一个引用块将今天的日期以两种不同的格式插入到两个已经初始化的字符缓冲区中,然后将它们存储到字符串中,第二个部分将所有内容写入文件。 date 的格式为 YYYY-MM-DD(%F),longdate 的格式为 Month DD, YYYY(%B %d, %Y)。问题是 strftime 在使用 %F 时无法将任何内容写入 char 缓冲区(使用调试确定)。如果我将 %F 更改为同义语法“%Y-%m-%d”,它会很好地返回年份和月份,但日期是两个被 g++ 框出的符号。令人困惑的部分是longdate 完美运行,所以timeinfo 不是问题。有什么想法吗?
【问题讨论】: