我正在编写代码以自动为我们的Web服务器写入标记,并且我在尝试使用strftime()
中的<ctime>
在文本文件中实现自动日期插入时遇到了麻烦{1}}标题。这是相关代码:
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();
第一个引用的块以两种不同的格式将今天的日期插入到两个已经初始化的char缓冲区中,然后将它们存储到字符串中,第二部分将所有内容写入文件。 date
格式为YYYY-MM-DD(%F),longdate
格式为月DD,YYYY(%B%d,%Y)。问题是当使用%F(使用debug确定)时,strftime无法向char缓冲区写入任何内容。如果我将%F更改为同义语法&#34;%Y-%m-%d&#34;,则返回年份和月份,但日期是两个符号,由g ++输出。令人困惑的部分是longdate
完美地运作,因此它不是timeinfo
的问题。有什么想法吗?
答案 0 :(得分:3)
您应该阅读standard definition for strftime
。特别是%F
的兼容性部分是:
在C99中引入(仅在C ++ 11之后的C ++实现中需要),并且可能不受符合旧标准的库的支持。