我想将当前时间打印为2011-08-18 10:11:12 -07:00
。我开发了如下代码片段,
#include <iostream>
using namespace std;
void time_to_string(time_t clock,const char *fmtstr )
{
char buf[256];
if (strftime(buf, 256, fmtstr, localtime(&clock)) == 0)
buf[0] = 0;
cout << buf << endl;
}
int main()
{
time_to_string(time(NULL), "%Y-%m-%d %H%M%S %z");
}
我可以将时间显示为2011-08-18 10:11:12 -0700
,但不能显示为2011-08-18 10:11:12 -07:00
。使用"%Y-%m-%d %H%M%S %:z"
生成2011-08-18 10:11:12 %:z
。
如何在C / C ++中完成上述任务。
答案 0 :(得分:3)
您必须手动将由%z
格式化的字符串拆分为+hhmm
或-hhmm
。 %z
具有固定格式。查看description of strftime。
以ISO 8601:2000标准格式(+ hhmm或-hhmm)与UTC的偏移量替换,如果没有可确定的时区则替换为无字符。
构建一个包含日期和时间的字符串。使用%z
的UTC偏移量构建第二个字符串,在第二个字符串中插入:
。连接第一个和第二个字符串。
答案 1 :(得分:1)
它试图解释%:并且它与格式说明符不匹配,因此它按原样打印出来。但你可能知道已经=)
在你的time_to_string函数中,我会在显示之前手动将':'插入缓冲区。
答案 2 :(得分:1)
您尝试的语法不存在。
我要做的是调用该函数两次:一次使用"%Y-%m-%d %H%M%S "
,一次使用"%z"
,手动在第二个字符串中添加:
,然后连接两个。< / p>
要插入:
,你可以做一个丑陋的缓冲区操作:
buf2[5]=buf2[4];
buf2[4]=buf2[3];
buf2[3]=':';
strcat(buf,buf2);
请注意,此特定数据的布局不太可能发生变化,所以它并不那么难看。
0r如果你真的像矫枉过正,那就是正则表达式。但是你需要一个外部库。
答案 3 :(得分:0)
您可以在末尾手动添加“:”,修改结果字符串。如,
buf[26]='\0';
buf[25]=buf[24];
buf[24]=buf[23];
buf[23]=':';
我可能会忽略一个更好的解决方案。