Linux——时间(1)
Linux中,用于保存时间值的数据结构是:
struct timeval{
long tv_sec;
long tv_usec;
};
其中tv_sec
的单位为秒,tv_usec
的单位为微秒(1秒(s) =1000毫秒(ms),1毫秒(ms)=1000微秒 (us),即1秒(s)=106微秒(us)),使用该数据表可以表示从某个时刻到另一个时刻(比如到现在)经过了多少的时间。
使用系统调用gettimeofday()
可以获取由内核维护的当前时间:该时间是从1970年1月1日(格林威治时间00:00:00)开始计算到现在时刻所经过的时间。
gettimeofday(
struct timeval *tv,
struct timezone *tz
);
在64位的Linux计算机上,长整型long
使用8个字节,按照一年大约225秒,即便是有符号长整型,大约可以表示到238年之后;而一些计算机上长整型long
使用4个字节,即大约到2034年时,维护的时间将发生溢出。
测试代码:
//getime.c
#include<stdio.h>
#include<sys/time.h>
struct timeval thetime;
void main(){
long minute,hour;
int day,year;
gettimeofday(&thetime,NULL);
printf("%ld,%ld\n",thetime.tv_sec,thetime.tv_usec);
minute = thetime.tv_sec / 60;
hour = minute / 60;
day = hour / 24;
year = day / 365;
printf("size of long:%ld\n",sizeof(long));
printf("min:%ld\nhour:%ld\nday:%d\nyear:%d\n\n",minute,hour,day,year);
}
运行
$ cc getime.c
$ ./a.out
1637687458,179524
size of long:8
min:27294790
hour:454913
day:18954
year:51