2024年5月31日发(作者:)
今天写程序,要用到localtime 运行时函数。开始是这样写的:
struct tm *newtime_i=NULL;
struct tm *newtime_o=NULL;
newtime_i = localtime(&filetime_i); //filetime_i 是time_t结构的文件的创建
时间
newtime_o = localtime(&filetime_o); //filetime_o 是time_t结构的文件的修改
时间
TextOut(hMYDC,120,-1,temmsg,
wsprintf (temmsg,TEXT("选取范
围: %02i:%02i:%02i.%03i- %02i:%02i:%02i.%03i 选取长度:%-7li(毫秒)"),
newtime_i->tm_hour, newtime_i->tm_min, newtime_i->tm_sec, msec_i,
newtime_o->tm_hour, newtime_o->tm_min, newtime_i->tm_sec, msec_o,0));
结果发现 newtime_i 和 newtime_o 的值是一样的,但是当时文件的创建时间和修
改时间是不同的,怎么会返回相同的值呢?
这个问题害得我花费了两个小时的时间,后来参考MSDN帮助,仔细查看了locatime
函数的注意事项,发现下面一段话:
gmtime, mktime, and localtime all use a single statically allocated tm
structure for the conversion. Each call to one of these routines destroys the result
of the previous call
原来这几个函数都使用了单一的静态 tm 变量,如果你这样写:
newtime_i = localtime(&filetime_i); //filetime_i 是time_t结构的文件的创建
时间
newtime_o = localtime(&filetime_o); //filetime_o 是time_t结构的文件的修改
时间
那么newtime_i 和 newtime_o 指向同一个变量的地址,所以返回的值也一样,要
解决这个问题只有这样写这段代码了:
int hour_i,min_i,sec_i, hour_o,min_o,sec_o;
newtime_i = localtime(&filetime_i);
if (newtime_i != NULL) {
hour_i = newtime_i->tm_hour;
min_i = newtime_i->tm_min;
sec_i = newtime_i->tm_sec;


发布评论