-
今天写程序,要用到
localtime
运行时函数。开始是这样写的:
struct tm *newtime_i=NULL;
struct tm
*newtime_o=NULL;
newtime_i
=
localtime(&filetime_i);
//filetime_i
是
time_t
< br>结构
的文件的创建时间
newtime_o = localtime(&filetime_o); //filetime_o
是
time_t
结构的
文件的修改时间
TextOut(hMYDC,120,-1,temmsg,
wsprintf (temmsg,TEXT(
选取范
围
p>
: %02i:%02i:%02i.%03i-
%02i:%02i:%02i.%03i
选取长度
:%-7
li(
毫秒
)
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
帮助,仔细查看了
loca
time
函数的注意事项,发现下面一段话:
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
< br>结构的
文件的创建时间
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;
}