1. time()
在Linux下,要获取当前时间,可以使用time()函数。这个函数的原型如下:
#include <time.h>
time_t time(time_t *t);
time()函数返回当前的系统时间,单位为秒。如果传入的参数t是非空指针,函数会将当前时间存储到该指针所指向的内存中。
2. localtime()
2.1 获取本地时间
要将time()函数返回的时间转换成本地时间,可以使用localtime()函数。这个函数的原型如下:
#include <time.h>
struct tm *localtime(const time_t *time);
localtime()函数接受一个time_t类型的参数,返回一个指向tm结构体的指针,该结构体包含了年、月、日、时、分、秒等时间信息。
2.2 tm结构体
tm结构体定义如下:
struct tm {
int tm_sec; // 秒,取值范围为0-59
int tm_min; // 分,取值范围为0-59
int tm_hour; // 时,取值范围为0-23
int tm_mday; // 一月中的第几天,取值范围为1-31
int tm_mon; // 月,取值范围为0-11,0代表一月,1代表二月,依此类推
int tm_year; // 年份,从1900年起的年数
int tm_wday; // 一周中的第几天,取值范围为0-6,0代表星期日,1代表星期一,依此类推
int tm_yday; // 一年中的第几天,取值范围为0-365,0代表1月1日,依此类推
int tm_isdst; // 夏令时标识,取值为正数表示在夏令时期间,为0表示不在夏令时,为负数表示夏令时的状态未知
};
使用tm结构体可以方便地获取年、月、日、时、分、秒等时间信息。
3. ctime()
3.1 将时间转换成字符串
如果需要将时间转换成字符串的格式,可以使用ctime()函数。这个函数的原型如下:
#include <time.h>
char *ctime(const time_t *time);
ctime()函数接受一个time_t类型的参数,返回一个指向字符串的指针。该字符串以可读的形式表示时间,格式如"Wed Jun 30 21:49:08 2021"。
3.2 strftime()
要将时间按照指定的格式转换成字符串,可以使用strftime()函数。这个函数的原型如下:
#include <time.h>
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
strftime()函数接受一个tm结构体的指针和一个格式化字符串作为参数,返回一个表示转换后字符串的长度。
其中,参数str是目标字符串的指针,maxsize是目标字符串的最大长度。format是一个格式化字符串,用于指定输出的格式,比如"%Y-%m-%d %H:%M:%S"表示年月日时分秒的格式。
4. clock_gettime()
4.1 获取更精确的时间
time()函数返回的时间只精确到秒,如果需要更精确的时间,可以使用clock_gettime()函数。这个函数的原型如下:
#include <time.h>
int clock_gettime(clockid_t clk_id, struct timespec *tp);
clock_gettime()函数接受一个时钟ID和一个保存时间的结构体指针作为参数。其中,时钟ID可以是CLOCK_REALTIME表示从系统时间读取,CLOCK_MONOTONIC表示从系统启动到现在的时间,CLOCK_PROCESS_CPUTIME_ID表示当前进程的CPU时间,CLOCK_THREAD_CPUTIME_ID表示当前线程的CPU时间。
返回值为0表示函数调用成功,-1表示出现错误。
4.2 struct timespec结构体
clock_gettime()函数返回的时间保存在一个struct timespec结构体中,定义如下:
struct timespec {
time_t tv_sec; // 秒
long tv_nsec; // 纳秒
};
tv_sec表示秒,tv_nsec表示纳秒。
5. 总结
本文介绍了在Linux下获取时间的几个常用函数,包括time()、localtime()、ctime()和strftime()。通过这些函数,可以方便地获取当前时间并进行格式化输出。另外,还介绍了clock_gettime()函数,该函数可以获取更精确的时间。
在实际应用中,根据需要选择合适的函数来获取时间,并根据具体需求进行格式化处理,可以满足各种时间获取和处理的需求。