linux常用的时间获取函数(time,gettimeofday,clock_gettime,_ftime,localtime,strftime )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

time()提供了秒级的精确度 

   

1、头文件 <time.h> 

2、函数原型 

time_t time(time_t * timer)  

函数返回从TC1970-1-1 0:0:0开始到现在的秒数 

   

time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。 

  

#include <time.h> 

#include <stdio.h> 

int main(void) 

    time_t t;  

    t = time(NULL); 

    printf("The number of seconds since January 1, 1970 is %ld",t); 

       

    return 0; 

}  

  

#include <stdio.h> 

#include <stddef.h> 

#include <time.h> 

int main(void) 

    time_t timer;//time_t就是long int 类型 

    struct tm *tblock; 

    timer = time(NULL);//这一句也可以改成time(&timer); 

    tblock = localtime(&timer); 

    printf("Local time is: %s/n",asctime(tblock)); 

       

    return 0; 

}

 

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

gettimeofday()提供了微秒级的精确度 

   

1、头文件 <time.h> 

2、函数原型 

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

   

gettimeofday()会把目前的时间由tv所指的结构返回,当地时区的信息则放到tz所指的结构中(可用NULL)。 

参数说明: 

    timeval结构定义为: 

    struct timeval 

    

        long tv_sec; /*秒*/ 

        long tv_usec; /*微秒*/ 

    }; 

    timezone 结构定义为: 

    struct timezone 

    

        int tz_minuteswest; /*和Greenwich 时间差了多少分钟*/ 

        int tz_dsttime; /*日光节约时间的状态*/ 

    }; 

    上述两个结构都定义在/usr/include/sys/time.h。tz_dsttime 所代表的状态如下 

        DST_NONE /*不使用*/ 

        DST_USA /*美国*/ 

        DST_AUST /*澳洲*/ 

        DST_WET /*西欧*/ 

        DST_MET /*中欧*/ 

        DST_EET /*东欧*/ 

        DST_CAN /*加拿大*/ 

        DST_GB /*大不列颠*/ 

        DST_RUM /*罗马尼亚*/ 

        DST_TUR /*土耳其*/ 

        DST_AUSTALT /*澳洲(1986年以后)*/ 

    

返回值: 成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。 

  

#include<stdio.h> 

#include<time.h> 

int main(void) 

    struct timeval tv; 

    struct timezone tz; 

       

    gettimeofday (&tv , &tz); 

       

    printf(“tv_sec; %d/n”, tv,.tv_sec) ; 

    printf(“tv_usec; %d/n”,tv.tv_usec); 

       

    printf(“tz_minuteswest; %d/n”, tz.tz_minuteswest); 

    printf(“tz_dsttime, %d/n”,tz.tz_dsttime); 

       

    return 0; 

}

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

clock_gettime( ) 提供了纳秒级的精确度 

   

1、头文件 <time.h> 

2、编译&链接。在编译链接时需加上 -lrt ;因为在librt中实现了clock_gettime函数 

3、函数原型 

int clock_gettime(clockid_t clk_id, struct timespect *tp); 

    参数说明: 

    clockid_t clk_id 用于指定计时时钟的类型,有以下4种: 

        CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变 

        CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 

        CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间 

        CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间 

    struct timespect *tp用来存储当前的时间,其结构如下: 

        struct timespec 

        

            time_t tv_sec; /* seconds */ 

            long tv_nsec; /* nanoseconds */ 

        }; 

    返回值。0成功,-1失败 

  

#include<stdio.h> 

#include<time.h> 

int main() 

    struct timespec ts; 

       

    clock_gettime(CLOCK_REALTIME, &ts); 

    printf("CLOCK_REALTIME: %d, %d", ts.tv_sec, ts.tv_nsec); 

       

    clock_gettime(CLOCK_MONOTONIC, &ts);//打印出来的时间跟 cat /proc/uptime 第一个参数一样 

    printf("CLOCK_MONOTONIC: %d, %d", ts.tv_sec, ts.tv_nsec); 

       

    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts); 

    printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d", ts.tv_sec, ts.tv_nsec); 

       

    clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); 

    printf("CLOCK_THREAD_CPUTIME_ID: %d, %d", ts.tv_sec, ts.tv_nsec); 

       

    printf("/n%d/n"time(NULL)); 

   

    return 0; 

/proc/uptime里面的两个数字分别表示:  

the uptime of the system (seconds), and the amount of time spent in idle process (seconds).  

把第一个数读出来,那就是从系统启动至今的时间,单位是秒 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

_ftime()提供毫秒级的精确度 

   

1、头文件 <sys/types.h> and <sys/timeb.h>  

2、函数原型 

void _ftime(struct _timeb *timeptr);  

参数说明: 

    struct _timeb  

    

        time_t time

        unsigned short millitm; 

        short timezone; 

        short dstflag; 

    };  

  

#include <stdio.h> 

#include <sys/timeb.h> 

#include <time.h> 

   

void main( void ) 

    struct _timeb timebuffer; 

    char *timeline; 

   

    _ftime( &timebuffer ); 

    timeline = ctime( & ( timebuffer.time ) ); 

   

    printf"The time is %.19s.%hu %s", timeline, timebuffer.millitm, &timeline[20] ); 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

头文件:#include <time.h>

 

定义函数:struct tm *localtime(const time_t * timep);

 

函数说明:localtime()将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm 返回。结构tm 的定义请参考gmtime()。此函数返回的时间日期已经转换成当地时区。

 

返回值:返回结构tm 代表目前的当地时间。

 

范例

#include <time.h>

main(){

    char *wday[] = {"Sun""Mon""Tue""Wed""Thu""Fri""Sat"};

    time_t timep;

    struct tm *p;

    time(&timep);

    p = localtime(&timep); //取得当地时间

    printf ("%d%d%d ", (1900+p->tm_year), (l+p->tm_mon), p->tm_mday);

    printf("%s%d:%d:%d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);

}

 

执行结果:

2000/10/28 Sat 11:12:22

 

 

size_t strftime ( char * ptr, size_t maxsize, const char * format, const struct tm * timeptr );

Format time to string

Copies into ptr the content of format, expanding its format tags into the corresponding values as specified bytimeptr, with a limit of maxsize characters.
 

Parameters

ptr

Pointer to the destination array where the resulting C string is copied.

maxsize

Maximum number of characters to be copied to ptr.

format

C string containing any combination of regular characters and special format specifiers. These format specifiers are replaced by the function to the corresponding values to represent the time specified in timeptr. They all begin with a percentage (%) sign, and are:

specifier Replaced by Example
%a Abbreviated weekday name * Thu
%A Full weekday name * Thursday
%b Abbreviated month name * Aug
%B Full month name * August
%c Date and time representation * Thu Aug 23 14:55:02 2001
%d Day of the month (01-31) 23
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (01-12) 08
%M Minute (00-59) 55
%p AM or PM designation PM
%S Second (00-61) 02
%U Week number with the first Sunday as the first day of week one (00-53) 33
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation * 08/23/01
%X Time representation * 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%Z Timezone name or abbreviation CDT
%% A % sign %

* The specifiers whose description is marked with an asterisk (*) are locale-dependent.

timeptr

Pointer to a tm structure that contains a calendar time broken down into its components (see tm).

 

Return Value

If the resulting C string fits in less than maxsize characters including the terminating null-character, the total number of characters copied to ptr (not including the terminating null-character) is returned.
Otherwise, zero is returned and the contents of the array are indeterminate.
 

Portability

This description corresponds to the C++ version of this function (which is the same as in the ISO-C Standard of 1990). C compilers may support additional specifiers and modifiers for the format parameter of this function, which are not described here.
 

Example

 

/* strftime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  time ( &rawtime );
  timeinfo = localtime ( &rawtime );

  strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
  puts (buffer);
  
  return 0;
}

 


Example output:

 Now it's 03:21PM.

 

上一篇:Android攒了一个月的面试题及解答,算法太TM重要了


下一篇:防脱洗发水是个伪命题?8979条数据告诉你答案