ntp编程中的时间转换
timeval为unix时间从1970年开始算,最小单位是微秒。
struct timeval { __time_t tv_sec; //秒 __suseconds_t tv_usec; //微秒
}
1、获得系统的timeval void gettimeval(struct timeval* tv) { union { __int64 ns100; FILETIME ft; } now; GetSystemTimeAsFileTime (&now.ft); tv->tv_usec = ((now.ns100/10)%1000000); //微秒 tv->tv_sec = ((now.ns100 - 116444736000000000) / 10000000); //1970年以来的秒数 } //116444736000000000为1601年到1970年的秒数。因windows时间从1601年开始算,最小单位是100ns。
2、ntp时间戳 struct ntptime { unsigned int integer; //1900年以来的秒数 unsigned int fraction;//小数部份,单位是微秒数的4294.967296(=2^32/10^6)倍 };
3、timeval到ntp时间戳的转换
ntptime.integar=timeval.tv_sec+JAN_1970; ntptime.fraction=timeva.tv_usec* 0x100000000/1000000;
其中: #define JAN_1970 0x83aa7e80 // (2208988800) 1900年到1970年的秒数
4、ntp时间戳转换为1970以来的时间
秒数=ntptime.integar-JAN_1970; 微秒数=ntptime.fraction *1000000/0x100000000 ;
struct timeval { __time_t tv_sec; //秒 __suseconds_t tv_usec; //微秒
}
1、获得系统的timeval void gettimeval(struct timeval* tv) { union { __int64 ns100; FILETIME ft; } now; GetSystemTimeAsFileTime (&now.ft); tv->tv_usec = ((now.ns100/10)%1000000); //微秒 tv->tv_sec = ((now.ns100 - 116444736000000000) / 10000000); //1970年以来的秒数 } //116444736000000000为1601年到1970年的秒数。因windows时间从1601年开始算,最小单位是100ns。
2、ntp时间戳 struct ntptime { unsigned int integer; //1900年以来的秒数 unsigned int fraction;//小数部份,单位是微秒数的4294.967296(=2^32/10^6)倍 };
3、timeval到ntp时间戳的转换
ntptime.integar=timeval.tv_sec+JAN_1970; ntptime.fraction=timeva.tv_usec* 0x100000000/1000000;
其中: #define JAN_1970 0x83aa7e80 // (2208988800) 1900年到1970年的秒数
4、ntp时间戳转换为1970以来的时间
秒数=ntptime.integar-JAN_1970; 微秒数=ntptime.fraction *1000000/0x100000000 ;
你可能想看: