linux常用的时间函数

来源:互联网 发布:jennifer lopez知乎 编辑:程序博客网 时间:2024/05/17 01:42


一、linux时间函数总结

  写停车场系统时需要用到时间函数,就百度了下,下面是转载某位博主的内容,看不懂得程序,自己敲一下也就懂了:

   asctime,  ctime, gmtime,localtime, gettimeofday

  mktime, asctime_r, ctime_r, gmtime_r,localtime_r

二、常用的结构体

1struct tm

复制代码

 1  struct tm {

 2               int tm_sec;        /* seconds */

 3               int tm_min;        /* minutes */

 4               int tm_hour;       /* hours */

 5               int tm_mday;       /* day of the month */

 6               int tm_mon;        /* month */

 7               int tm_year;       /* year */

 8               int tm_wday;       /* day of the week */

 9               int tm_yday;       /* day in the year */

10               int tm_isdst;      /* daylight saving time */

11           };

12           

13//int tm_sec代表目前秒数,正常范围为0-59,但允许至61

14//int tm_min代表目前分数,范围0-59

15//int tm_hour从午夜算起的时数,范围为0-23

16//int tm_mday目前月份的日数,范围01-31

17//int tm_mon代表目前月份,从一月算起,范围从0-11

18//int tm_year1900年算起至今的年数

19//int tm_wday一星期的日数,从星期一算起,范围为0-6

20//int tm_yday从今年11日算起至今的天数,范围为0-365

21//int tm_isdst日光节约时间的旗标

复制代码

2struct timevalstruct timezone

复制代码

 1struct timeval {

 2               time_t      tv_sec;     /* seconds ()*/

 3               suseconds_ttv_usec;    /* microseconds(微秒) */

 4           };

 5struct timezone {

 6               int tz_minuteswest;    /* minutes west of Greenwich */

 7               int tz_dsttime;        /* type of DST correction */

 8           };

 9int tz_minuteswest;    /*格林威治时间往西方的时差 */

10int tz_dsttime;        /* 时间的修正方式*/   

复制代码

 三、时间函数介绍:

1time()函数获取当前时间

复制代码

 1 SYNOPSIS

 2       #include <time.h>

 3

 4       time_t time(time_t *t);

 5

 6 DESCRIPTION

 7       time() returns the time as the number of seconds since the Epoch, 1970-01-0100:00:00 +0000 (UTC).

 8    //此函数会返回从公元197011日的UTC时间从000秒算起到现在所经过的秒数。如果t并非空指针的话,此函数也会将返回值存到t指针所指的内存。

 9 RETURN VALUE

10       On success,  the value of timein seconds since the Epochis returned. On error, ((time_t) -1)is returned, and errnois

11       set appropriately.

12 ERRORS

13       EFAULT t points outside your accessibleaddress space.

14    //成功返回秒数,错误则返回(time_t) -1),错误原因存于errno

复制代码

eg

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <time.h>

 4

 5int main()

 6 {

 7    time_t seconds;

 8

 9    seconds = time((time_t *)NULL);

10    printf("%d\n", seconds);

11

12    return0;

13 }

复制代码

2localtime_r()localtime()取得当地目前时间和日期

函数原型如下:

复制代码

1 #include<time.h>

2       

3    struct tm *localtime(const time_t *timep);

4    struct tm *localtime_r(const time_t *timep, struct tm *result);

5        

6/*该函数将有time函数获取的值timep转换真实世界所使用的时间日期表示方法,然后将结果由结构tm返回*/

7

8/**需要注意的是localtime函数可以将时间转换本地时间,但是localtime函数不是线程安全的。

9多线程应用里面,应该用localtime_r函数替代localtime函数,因为localtime_r是线程安全的**/

复制代码

 eg

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <time.h>

 4

 5int main()

 6 {

 7    time_t timep;  

 8    struct tm *p;

 9   

10    time(&timep);  

11    p = localtime(&timep);

12   

13    printf("%d-%d-%d%d:%d:%d\n", (1900 + p->tm_year), ( 1 + p->tm_mon), p->tm_mday,

14                                (p->tm_hour+ 12), p->tm_min, p->tm_sec);

15

16    return0;

17 }

复制代码

3asctime() asctime_r()将时间和日期以字符串格式返回‘

函数原型如下:

复制代码

 1 #include <time.h>

 2       

 3    struct tm *gmtime(const time_t *timep);

 4    struct tm *gmtime_r(const time_t *timep, struct tm *result);

 5       

 6    char *asctime(conststruct tm *tm);

 7    char *asctime_r(conststruct tm *tm,char *buf);

 8       

 9       

10/**gmtime是把日期和时间转换为格林威治(GMT)时间的函数。将参数time所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回**/

11       

12/**asctime将时间以换为字符串字符串格式返回 **/

复制代码

 eg:

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <time.h>

 4  

 5int main()

 6 {  

 7    time_t timep;  

 8    time(&timep);

 9   

10    printf("%s\n", asctime(gmtime(&timep)));  

11    

12    return0;

13 }

复制代码

4ctime()ctime_r()将时间和日期以字符串格式表示

函数原型如下:

复制代码

1 #include<time.h>

2       

3       char *ctime(const time_t *timep);

4       char *ctime_r(const time_t *timep, char *buf);

5       

6/**ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回**/

复制代码

eg

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <time.h>  

 4

 5int main(void)  

 6 {  

 7    time_t timep;

 8 

 9    time(&timep);  

10    printf("%s\n", ctime(&timep));

11    

12    return0; 

13 }

复制代码

5mktime()将时间结构体struct tm的值转化为经过的秒数

函数原型:

1 #include<time.h>

2       

3    time_t mktime(struct tm *tm);

4       

5/**将时间结构体struct tm的值转化为经过的秒数**/

eg

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <time.h> 

 4 

 5int main()  

 6 {  

 7    time_t timep;  

 8    struct tm *p;  

 9

10    time(&timep);  

11    p = localtime(&timep);  

12    timep = mktime(p);

13   

14    printf("%d\n", timep);  

15    

16    return0;

17 }

复制代码

**最后结果可以看出mktime转化后的时间与time函数获取的一样**

6gettimeofday()获取当前时间

函数原型如下:

复制代码

 1 #include <sys/time.h>

 2

 3    int gettimeofday(struct timeval *tv, struct timezone *tz);

 4    

 5struct timeval {

 6               time_t      tv_sec;     /* seconds ()*/

 7               suseconds_t tv_usec;    /* microseconds(微秒) */

 8           };

 9struct timezone {

10               int tz_minuteswest;    /* minutes west of Greenwich */

11               int tz_dsttime;        /* type of DST correction */

12           };

13//gettimeofday函数获取当前时间存于tv结构体中,相应的时区信息则存于tz结构体中

14//需要注意的是tz是依赖于系统,不同的系统可能存在获取不到的可能,因此通常设置为NULL   

复制代码

 eg

复制代码

 1 #include <stdio.h>

 2 #include <string.h>

 3 #include <sys/time.h>

 4

 5int main()

 6 {

 7    struct timeval tv;

 8    

 9    gettimeofday(&tv, NULL);

10

11    printf("tv_sec:%d\n", tv.tv_sec);

12    printf("tv_usec:%d\n", tv.tv_usec);

13    

14    return0;

15 }

0 0
原创粉丝点击