UNIX及Linux的时间系统是由「新纪元时间」Epoch开始计算起,单位为秒。
Epoch是指1970年1月1日凌晨零点零分零秒;gettimeofday可以获得微秒级结果,正值表示为1970以后、负值则表示1970年以前。
一、毫秒级时间获取
1.源程序
#include <stdio.h>
#include <sys/time.h>
/*
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
int main()
{
printf("TK------>>>>>>sizeof(long) is %d\n",sizeof(long));
printf("c/c++ program:%llu\n",getCurrentTime());
return 0;
}
*/
unsigned long long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
unsigned long long sec = tv.tv_sec;
sec = sec * 1000;
unsigned long long usec = tv.tv_usec;
usec = usec / 1000;
unsigned long long cur = sec + usec;
return cur;
}
int main()
{
printf("TK------>>>>>>sizeof(unsigned long long) is %d\n",sizeof(unsigned long long));
printf("c/c++ program:%llu\n",getCurrentTime());
return 0;
}
2.编译
g++ -o main main.cpp
3.运行及结果
./main
/*
TK------>>>>>>sizeof(long) is 8
c/c++ program:1404973788585
*/
TK------>>>>>>sizeof(unsigned long long) is 8
c/c++ program:1404974786756
4.结论
可以看出:未屏蔽代码段使用unsigned long long移植性更高;在32位和64位机器中都能很好的完成毫秒级时间的正确获取!