#ifndef _TIMEB_DEFINED
struct __timeb32 { // - 32位时间
__time32_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
#if !__STDC__
/ * - 兼容非ANSI名字 - * /
struct timeb {
time_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
#endif
struct __timeb64 { // - 64位时间
__time64_t time;// - 距1970年1月1日0:0:0的秒数
unsigned short millitm;// - 毫秒数
short timezone;// - 时区
short dstflag; // - 夏令时标志
};
#ifdef _USE_32BIT_TIME_T
#define _timeb __timeb32
#else
#define _timeb __timeb64
#endif
#define _TIMEB_DEFINED
#endif
定义详细说明:
1.__timeb32是32位的时间格式结构体,__timeb64是64位时间格式结构体,timeb则是兼容时间格式结构体。time_t就是通用定义,根据环境不同,可以被定义为32位或者64位。time_t时间类型说明,参考《时间类型time_t详细说明》。
2.由
#define _timeb __timeb32
#define _timeb __timeb64
可以看出是根据宏_USE_32BIT_TIME_T是否已经被定义,来决定_timeb 真正的位数,以及对应结构体类型。
3.而在__timeb32、__timeb64和timeb三个结构体中,都是四个成员,对应的成员代表的意义是一样的。
4.在64位结构体中,标注了每个成员的基本意义。下面详细解释一下。第一个成员是秒数,注释秒数的很清楚了。如果对为什么是从1970年开始有兴趣,可以参考文章《时间的来源、表示、计算机计时和时间校准全面详细分析》。第二个成员表示的是在第一个成员的基础上的秒数和下一秒之间所经过的毫秒数。用于更加精确的计时。这个在time_t时间类型中精度为秒,要提供更加精确的时间,此结构体可以满足。第三个成员是时区。在tm结构体中,没有这个标志。一般用在本地时间,自然是以本地时区来自动计算的。此结构体用一个单独的成员来存储时区,更加灵活使用。最后一个成员是夏令时标志。夏令时标志的详细解释,参考文章《时间日期结构体tm详细解释》中的最后一个成员。
5.使用此结构体的函数有:_ftime