Linux 时间函数总结

1.asctime

功能:
	将时间和日期以字符串格式表示;		
头文件:
	#include<time.h>		
函数声明:
	char *asctime(const struct tm *timeptr);
函数说明:
	asctime()将参数timeptr所指的tm结构中信息装换成现实世界所使用的的时间日期表示方法,
	然后将结果以字符串类型返回;这个函数已经由时区转换成当地时间,字符串格式为:
	"Tue Apr  6 23:25:24 2021\n"(自带回车换行'\n');
返回值:
	这个子字符串可能会被破坏,这个函数与ctime()不同之处在于传入的参数的结构;

示例:

int main()
{
	time_t  timeptr;
	time(&timeptr);
	printf("%ld ->%s\n",timeptr,asctime(gmtime(&timeptr)));
	//结果:1617751524->Tue Apr  6 23:25:24 2021
}

2.ctime

功能说明:
	将时间和日期以字符串格式表示
头文件:
	#include <time.h>
函数声明:
	char *ctime(const time_t *timeptr);
函数说明:
	ctime()将参数timeptr所指的time_t结构体中的信息转换成现实世界所用的时间日期表示方法,然后将结果一字符串类型返回;这个函数已经由时区转换成当地时间,字符串格式为:"Tue Apr  6 19:35:58 2021\n";
返回值:
	返回一个字符串表示的当地的时间日期;

示例:

int main()
{
	time_t timeptr;
	time(&timeptr);
	printf("%s\n",ctime(&timeptr));
	//结果:Tue Apr  6 19:35:58 2021
}

3.clock

功能说明:	
	取得进程占用CPU的大约时间;
头文件:
	#include <time.h>
函数声明:
	clock_t clock(void);
函数说明:
	clock()用来取得进程所占用cpu的大约时间;
返回值:
	 返回进程所占用cpu的大约时间;

4.difftime

功能说明:
	计算时间差距
头文件:
	#include <time.h>
函数声明:
	double difftime(time_t time1, time_t time0);
函数说明:
	difftime()用来计算参数time1和time0所表示的时间差距,结果以double类型精确值返回;两个参数都是以1970年1月1日0时0分0秒算起的UTC时间;
返回值:
	返回精确的时间差距秒数;

示例:

int main()
{
	time_t time0;
	time(&time0);
	sleep(3);
	time_t time1;
	time(&time1);
	printf("%f\n",difftime(time1,time0));
	//结果:3.000
}

5.ftime

功能描述:
	取得当前的时间和日期
头文件:
	#include <sys/timeb.h>
函数声明:
	int ftime(struct timeb *tp);
函数说明:
	ftime()将当前日期时间由tp所指的结构返回;tp结果定义为:
	struct timeb{
		time_t time;
		unsigned short millitm;
		short timezone;
		short dstflag;
	};	
	其中:time为从公元1970年1月1日至今的秒数;
			millitm为千分之一秒;
			timezone为当前时区和Greenwich相差的时间,单位为分钟;
			dstflag为夏令时的修正状态,如果为非0表示启用夏令时修正;
返回值:
		无论成功或失败都是0;

示例:

int main()
{
	struct timeb tp;
	ftime(&tp);
	printf("time:%ld millitm:%d  timezone:%d dstflag:%d\n",
			tp.time,tp.millitm,tp.timezone,tp.dstflag);
}
结果:time:1617839305 millitm:207  timezone:240 dstflag:0
	

6.gettimeofday

功能说明:
		取得当前的时间
头文件:
		#include <sys.time.h>
		#include <unistd.h>
函数申明:
		int gettimeofday(struct timeval *tv, struct timezone *tz);
函数说明:
		gettimeofday()会把当前的时间由tv所指的结构返回,当地时区的信息则放在由tz所指的结构中;
		
		其中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中;

示例:

int main()
{
		struct timeval tv;
		struct timezone tz;
		gettimeofday(&tv, &tz);
		printf("tv_sec:%d  tv_usec:%d\n",tv.tv_sec,tv.tv_usec);
		printf("tz_minuteswest:%d tz_dsttime:%d\n",tz.tz_minuteswest,tz.tz_dsttime);
}	
结果:tv_sec:1617841175 tv_usec:277060
	 tz_minuteswest:240  tz_dsttime:0

7.settimeofday

功能说明:
	设置当前时间;
头文件:
	#include <sys/time.h>
	#include <unistd.h>
函数声明:
	int settimeofday(const struct timeval *tv, const struct timezone *tz);
函数说明:
	gettimeofday()会把当前的时间设置成由tv所指的结构信息,当前时区信息则设成tz所指的结构;
	注意:只有root权限才能使用这个函数修改时间;
返回值:
	成功返回0,失败返回-1,错误码存在于errno中;

错误代码:
	EPERM 并非由root权限调用settimeofday(),权限不够;
	EINVAL 时区或某个数据不正确,无法正确设置时间;

8.gmtime

功能说明:
		取得当前的事件和日期
头文件:
		#include <time.h>
函数声明:
		struct tm *gmtime(const time_t *timep);
函数说明:
		gmtime()将参数timep所指的time_t结构中的信息转换成现实世界所使用的时间日期表示方法,
		然后将结果由结构tm返回,结果tm定义为:
		struct tm{
				int tm_sec;//当前秒数,正常范围0~59,但允许至61秒;
				int tm_min;//当前分数,范围0~59
				int tm_hour;//从午夜算起的时数,范围0~23
				int tm_mday;//当前月份天数,1~31
				int tm_mon;//当前月份,从一月算起,范围0~11
				int tm_year;//从1900年算起至今的年数;
				int tm_wday;//一个星期中的天数,从星期日算起,范围0~6
				int tm_yday;//从今年1月1日算起至今的天数,范围0~365
				int tm_isdst;//夏令时标志,这个函数返回的时间日期未经时区转换,而是UTC时间;
		};

示例:

int main()
{
		char *wday[] = {"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
		time_t timep;
		struct tm *p;
		time(&timep);
		p = gmtime(&timep);
		printf("%d/%d/%d  %s   %d:%d:%d",(p->tm_year+1900),(p->tm_mon+1),p->tm_mday,
					wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
}

9.localtime

功能说明:
		取得当地当前的时间和日期
头文件:
		#include <time.h>
函数申明:
		struct tm *localtime(const time_t *timep);
函数说明:
		localtime()将参数timep所指的time_t结构体中的信息转换成现实世界所使用的时间日期表示方法,
		然后将结果由结构tm返回;
返回值:
		返回结构tm表示当前的当地时间;

示例:

int 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  %s   %d:%d:%d",(p->tm_year+1900),(p->tm_mon+1),p->tm_mday,
					wday[p->tm_wday],p->tm_hour,p->tm_min,p->tm_sec);
}

10 mktime

功能描述:
	将时间结构数据转换成经过的秒数
头文件:
	#include <time.h>
函数声明:
	time_t mktime(struct tm *timeptr);
函数声明:
	mktime()用来将参数timeptr所指的tm结构数据转换成从公元1970年1月1日0时0分0秒算起
	至今的UTC时间所经过的秒数;
返回值:
	返回经过的秒数

示例:

/*用time()取得时间,使用localtime()转换成struct tm,再使用mktime()将struct tm转换成
  原来的秒数
*/
int main()
{
	time_t timep;
	struct tm *p;
	time(&timep);
	printf("time():%ld--\n",timep);
	p = localtime(&timep);
	timep = mktime(p);
	printf("time()->localtime()->mktime():%ld\n",timep);
	return 0;
}
结果:time():1618111707
	 time()->localtime()->mktime():1618111707

11. strftime

功能说明:
	格式化日期和时间;
头文件:
	#include <time.h>
函数声明:
	size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
函数说明:
	strftime()会将参数tm的时间结构,按照参数format所指定的字符串格式作转换,
	转换后的字符串内容将负制到参数所指的字符串数组中,该字符串的最大长度
	为参数max控制;参数format的格式和一般格式化字符串相当于类似,都是以%
	字符所控制,以下是其格式指令:
	%a 当地星期几的名称缩写,如Sun
	%A 当地星期几的完整名称,如Sunday
	%b 当地月份的缩写
	%B 当地月份完整名称
	%c 当地适当的日期与时间表示法
	%C 以year/100表示年份;
	%d 月里的天数,表示法为01~31
	%D 相当于%m/%d/%y格式
	%e 如同%d为一个月里的天数,表示法为1~31
	%h 和%b相同
	%H 以24小时制表示时数(00~23);
	%I  以12时制表示时数(01~12)
	%j 一年中的天数(001~336)
	%k 如同%H,但表示法为0~23
	%l  如同%I,但表示法为1~12
	%m 月份(01~12)
	%M 分钟数(00~59)
	%n 同/n
	%p 显示对应的AM或PM表示;
	%P 和%p相同,但是用小写的am和pm表示;
	%r 相当于使用"%I:%M:%S %p"格式;
	%R 相当于使用"%H:%M"格式
	%s 从1970-01-01 00:00:00 UTC算起至今的秒数
	%S 秒数(00~59)
	%t 同\t
	%T 24小时时间表示,相当于使用"%H:%M:%S"格式
	%u 一星期中的星期几,范围1~7,星期一从1开始;
	%U 一年中的星期数(00~53),一月的第一个星期日开始为01;
	%w 一星期中的星期几,范围0~6,星期日从0开始;
	%W 一年中的星期数(00~53),一月的第一个星期一开始为01
	%x 当地适当的日期表示
	%X 当地适当的时间表示;
	%y 一个世纪中的年份
	%Y 完整的公元年份表示;
	%Z 使用的时区名称
	%% '%'符号
返回值:
	返回复制到参数s所指的字符串数组的总字节数,不包括字符串结束符号;
	如果返回0,表示未复制字符串到参数s内,但不表示一定有错误发生;
说明:
	环境变量TZ和TC_TIME会影响这个函数结果;

示例:

int main()
{
	char *format[] = {"%I:%M:%S  %p  %m/%d %a",
							"%x  %X  %Y",
							NULL};
	char *buf[30] ;
	int i = 0;
	time_t clock;
	struct tm *tm = NULL;
	time(&clock);
	tm = gmtime(&clock);
	for(i = 0 ; format[i] != NULL; i++){
	  memset(buf, 0 , sizeof(buf));
	  strftime(buf, sizeof(buf),format[i],tm);
	  printf("% s=> %s\n",format[i],buf);
	}
		
	return 0;
}
结果:
	%I:%M:%S  %p  %m/%d %a=> 04:09:54  AM  04/11 Sun
	%x  %X  %Y=> 04/11/21  04:09:54  2021

12 time

功能说明:
	取得当前的时间
头文件:
	#include <time.h>
函数声明:
	time_t time(time_t *t);
函数说明:
	这个函数会返回从公元1970年1月1日的UTC时间0时0分0秒算起到现在所经过的秒数;
	如果t并非空指针的话,这个函数也会将返回值存储到t指针所指的内存中;
返回值:
	成功则返回秒数,失败则返回((time_t)-1)值,错误码存在errno中;

示例:

int main()
	{
	//两种都可以
	#if 1
		time_t sec = time((time_t *)NULL);
		printf("%ld\n",sec);
	#else
		time_t sec;
		time(&sec);
		printf("%ld\n",sec);
	#endif	
		return 0;
	}

13 tzset

功能说明:
	设置时区以供时间转换
头文件:
	#include <time.h>
函数声明:
	void tzset(void);
	extern char *tzname[2];
函数说明:
	tzset()用来将环境变量TZ设给全局变量tzname,也就是从环境变量取得当前的时区;
	时间转换的函数会自动调用这个函数,如果环境变量TZ未设置,全局变量tzname会
	按照/etc/localtime找出最接近当地的时区.如果环境变量TZ的值为NULL,或是无法判断,
	则使用UTC时区;
返回值:这个函数总是调用成功,并且初始化全局变量tzname;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天未及海宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值