Linux获取当前时间函数
======================
近些年,随着Linux在计算机技术中日趋复杂,获取当前系统时间也成为一个经常遇到的问题,尤其是在C/C++/Java程序中更加常见。获取本地时间的方法有很多,本文将着重介绍以下几种Linux函数的使用,希望能够提供一些帮助:
### 1. time函数
`time()`函数是最常用的获取时间的函数,函数的原型如下:
```
time_t time(time_t *t);
```
此函数的作用是获取当前的UNIX时间戳,UNIX时间戳表示从1970年1月1日00:00:00开始到现在的总秒数。因此,可以根据UNIX时间戳计算出当前时间,如:
```
time_t currt = time(NULL);
struct tm *lt;
lt = localtime(&currt);
printf("%04d年%02d月%02d日%02d时%02d分%02d秒\n",
lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday,
lt->tm_hour, lt->tm_min, lt->tm_sec);
```
以上代码可以获取当前的年月日、时分秒信息,要更加详细的信息可以使用`ctime ,asctime`函数。
### 2. gettimeofday函数
`gettimeofday`函数可以获取更加精确的系统时间(可以精确到毫秒),函数原型如下:
```
int gettimeofday(struct timeval *tv, struct timezone *tz);
```
`tv`参数用来保存时间值,`tz`参数属于遗留函数,时间值像`time_t`一样以毫秒为单位记录,使用`gettimeofday`获取本地时间如下:
```
struct timeval tv;
gettimeofday(&tv,NULL);
printf("tv_sec:%ld\n",tv.tv_sec);
printf("tv_usec:%ld\n",tv.tv_usec);
```
可以结合`time`函数,将得到的`tv_sec`和`tv_usec`进行拼接,输出更加精确的当前时间。
### 3. clock_gettime函数
`clock_gettime`函数不仅可以用于获取本地的时间,还可以用来测量程序的运行时间。该函数可以在Linux 2.6.28之后的版本中使用,函数原型如下:
```
int clock_gettime(clockid_t clk_id, struct timespec *tp);
```
`clk_id`表示时钟ID,可以用来获取一些精确的时钟,如`CLOCK_REALTIME`。而`tp`是一个时间结构体`timespec`,里面有两个变量`tv_sec`和`tv_nsec`,分别表示秒和纳秒数。使用`clock_gettime`函数获取当前时间如下:
```
struct timespec ts;
clock_gettime(CLOCK_REALTIME,&ts);
printf("tv_sec:%ld\n",ts.tv_sec);
printf("tv_nsec:%ld\n",ts.tv_nsec);
```
### 结论
以上就是Linux的几种获取当前系统时间的函数,这些函数是在C/C++、Java等语言中经常使用的,如果需要使用编程来更加精确地获取时间,本文介绍的函数实现都可以满足需求。