Linux——时间(1)

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