Linux之获取系统时间(time函数、gettimeofday函数)
一、相关函数介绍
1.1 ctime()函数
#include <time.h>
char *ctime(const time_t *timer)
①函数功能:将日历时间参数time转换为一个表示本地当前时间的字符串;
②函数参数:timer为time()函数获得
③函数返回值:返回字符串格式(星期 月 日 小时:分:秒 年);
1.2 localtime()函数
struct tm *localtime(const time_t *timer);
tm结构:
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
①函数功能:使用timer的值填充tm结构体,其值会被分解为tm结构,并用本地时区表示;
②函数参数:timer为time()函数获得;
③函数返回值:以tm结构表达的时间;
1.3 strftime()函数
#include <time.h>
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
①函数功能:年-月-日 小时:分钟:秒 格式的日期字符串转换成其它形式的字符串;
②函数参数:
第一个参数→str为指向目标数组的指针,用来复制产生的C字符串;
第二个参数→maxsize为被复制到str的最大字符数;
第三个参数→format为C字符串,包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示 tm 中所指定时间的相对应值;
第四个参数→timeptr指向 tm 结构的指针,tm结构体详情可见ctime()函数;
③函数返回值:如果产生的 C 字符串小于 maxsize 个字符(包括空结束字符),则会返回复制到 str 中的字符总数(不包括空结束字符),否则返回零。
二、获取系统时间方法
2.1.1 time()函数
#include <time.h>
time_t time(time_t *timer);
time_t 是一个unsigned long类型,
①函数功能:得到当前日历时间或设置日历时间
②函数参数:
timer = NULL时,为得到当前日历时间(从1970-01-01 00:00:00到现在的秒数);
timer = 时间数值时,用于设置日历时间,其返回值存储在timer中;
③函数返回值:返回当前日历时间
2.1.2 time()案例
输出时间格式:Mon Mar 20 15 : 51 : 31 2023
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <sys/time.h>
int printf_time(void);
int main(int argc,char **argv)
{
printf_time();//调用获取时间函数
return 0;
}
int printf_time(void)
{
time_t timep;//time_t 是一个适合存储日历时间类型
time(&timep);
char *s = ctime(&timep);//ctime()把日期和时间转换为字符串
printf("date:%s",s);
return 0;
}
输出结果:
date:Mon Mar 20 15:51:31 2023
2.2.1 gettimeofday()函数
#include <unistd.h>
#include <sys/time.h>
int gettimeofday(struct timeval *tv,struct timezone *tz);
timeval结构体:
struct timeval{
long tv_sec; // 秒数
long tv_usec; // 微秒数
};
timezone结构体:
struct timezone{
int tz_minuteswest;//格林威治时间往西方的时差
int tz_dsttime;//DST 时间的修正方式
};
①函数功能:把目前的时间由tv所指向的结构体返回,当地时区的信息则放到tz所指的结构中;
②函数参数:
第一个参数→tv为timeval结构体;
第二个参数→tz为timezone结构体;
③函数返回值:在gettimeofday()函数中的俩个参数都可以为NULL,为NULL时对应的结构体将不返回值。成功,返回0;失败,返回-1,原因存在errno中;
2.2.2 gettimeofday()案例
输出时间格式:2023-03-20 20:38:37
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <sys/time.h>
int get_time(char *buff,int len);
int main(int argc, const char **argv)
{
char buff[40];
get_time(buff, sizeof(buff));
printf("time:%sn", buff);
return 0;
}
int get_time(char *buff,int len)
{
struct timeval tv;
struct tm* ptm;
char time_string[40];
gettimeofday(&tv, NULL);
ptm = localtime (&(tv.tv_sec));
strftime (time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm); //输出格式为: 2022-03-30 20:38:37
snprintf (buff, len, "%s", time_string);
return 0;
}
输出结果:
time:2023-03-20 20:38:37