C++ strftime方法格式输出时间错误
voidgetSysTime(char*out,constchar*format){time_tt=time(NULL);structtm*tm=localtime(&t...
void getSysTime(char* out, const char* format)
{
time_t t = time(NULL);
struct tm* tm = localtime(&t);
strftime(out, sizeof(out), format, tm);
}
format为%Y%m%d时就只能输出201501,没有日期,而单独输出月和日也可以输出0120,out申请的空间肯定足够了,很奇怪的问题。如果输入的格式是%Y-%m-%d %H:%M:%S,就只输出2015-01。
搞得现在只能单独把年份输出出来以后,再和后面的月日时间拼字符串,麻烦啊。 展开
{
time_t t = time(NULL);
struct tm* tm = localtime(&t);
strftime(out, sizeof(out), format, tm);
}
format为%Y%m%d时就只能输出201501,没有日期,而单独输出月和日也可以输出0120,out申请的空间肯定足够了,很奇怪的问题。如果输入的格式是%Y-%m-%d %H:%M:%S,就只输出2015-01。
搞得现在只能单独把年份输出出来以后,再和后面的月日时间拼字符串,麻烦啊。 展开
5个回答
展开全部
C/C++中,数组作参数时,会退化成指针,所以你用sizeof(out)计算出来的长度就是指针的长度,根据你操作系统的位数,有可能是4或者8,也就是说最多往out里写4或者8个字节,所以,出来的结果就不对了,改一下就行了:
#include <stdio.h>
#include <time.h>
void getSysTime(char* out, const char* format)
{
time_t t = time(NULL);
struct tm* tm = localtime(&t);
strftime(out, 100, format, tm);//可以接收的最大字符数修改一下,注意字符串结束符,我这里没处理,因为一般需要的长度不会超过100
}
int main()
{
char cTime[100] = {0};
getSysTime(cTime, "%Y-%m-%d %H:%M:%S");
printf("%s\n", cTime);
return 0;
}
运行截图:
展开全部
和小白范提到的一样,你的maxsize是有问题的,而且也不能出现你所提到的结果。
以下代码仅供参考:
void getSysTime(char out[],int bufSize, const char* format)
{
time_t t = time(NULL);
struct tm tm;
localtime_s(&tm,&t);
strftime(out, bufSize, format, &tm);
}
int main(int argc, char* argv[])
{
char out[32]={0};
getSysTime(out,sizeof(out),"%Y-%m-%d");
printf("time:%s\n",out);
return 0;
}
你定义数组然后输出是和你传递参数在输出是不一样的!sizeof是以数组名为参数进行统计出当前数组的大小的!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能黑丝因为格式中有空格,导致输出的时候遇到空格就自动结束了。
你可以强制输出试试、
你可以强制输出试试、
追问
没有空格,一般输出应该也是遇到\0结束吧
追答
%Y-%m-%d %H:%M:%S
这里不是有空格吗
你可以这样%Y-%m-%d-%H:%M:%S测试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意,out是char型的指针,sizeof(out) = sizeof(char*)=4
更多追问追答
追问
抱歉,这个我注意过了,输出sizeof(out),是20,我输入的是个20位的char数组
追答
在函数getSysTime内部,out不再是数组的名称,仅仅是一个指针。
你在out数据的作用域内计算sizeof(out)是20,但在函数内部计算sizeof(out)就不是20了,而是一个字长(在32位系统下就是4),不信你试试。
你还可以把strftime(out, sizeof(out), format, tm)改成strftime(out, 20, format, tm)试试。
正确的做法是,将out数组的大小也当作参数传给getSysTime函数。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
strftime按照format获取时间 没有问题的。
调用的地方 参数有没有问题??
调用的地方 参数有没有问题??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询