C语言时间库

C语言与时间库

#include<time.h>

一、3种时间类型

1.time_t

time_t实际上是长整数类型
定义为:

typedef long time_t;

此类型通常用来表示:从1970年1月1日00:00:00到当前时刻的秒数。

2.timeval

timeval是一个结构体
定义为:

struct timeval{
	_time_t tv_sec;				//秒
	_susenconds_t tv_usec;  //微秒
};

其中,tv_sec为Epoch(1970-1-1零点零分)到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。

3.tm

tm是一个结构体
定义为:

struct tm{
 	int tm_sec;     /*代表目前秒数,正常范围为0-59,但允许至61秒 */
    int tm_min;     /*代表目前分数,范围0-59*/
    int tm_hour;    /* 从午夜算起的时数,范围为0-23 */
    int tm_mday;   /* 目前月份的日数,范围01-31 */
    int tm_mon;     /*代表目前月份,从一月算起,范围从0-11 */
    int tm_year;   /*从1900 年算起至今的年数*/
    int tm_wday;   /* 一星期的日数,从星期一算起,范围为0-6。*/
    int tm_yday;   /* Days in year.[0-365] */
    int tm_isdst;   /*日光节约时间的旗标DST. [-1/0/1]*/
};

二、常见时间操作函数

1.time()

原 型

time_t  time(time_t * timer)

功能:获得当前系统时间,返回time_t类型
两种使用方式:
(1)

t1=time(NULL);
t1=time(0);//两种写法等价,将空指针传递给time()函数,并将time()返回值赋给变量t1

(2)

time(&t2);//将变量t2的地址作为实参传递给time()函数,函数自动把结果传递给t2,不需要额外的赋值语句。

2.gmtime()

原 型

struct tm *gmtime(long *clock);

功能:把time_t类型转换成struct tm,此函数返回的时间未经时区转换,是UTC时间,返回的结构体tm代表目前UTC时间。(UTC时间:协调世界时,又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。
使用举例

time_t t=time(0);
gmtime(&t);//返回tm*类型

3.localtime()

原型

struct tm *localtime(const time_t *clock);

功能:把time_t类型转换成struct tm,此函数返回的时间经过时区转换,是本地时间((我们是+8区,比UTC多8个小时)),比如,返回的结构体tm代表目前本地时间。
使用举例

time_t t=time(0);
localtime(&t);//返回tm*类型

4.asctime()

原型

char *asctime(const struct tm *tblock);

功能:转换日期和时间为相应的字符串(英文简写形式,形如:Mon Feb 16 11:29:26 2009)。
使用举例

time_t t=time(0);
char* str1,*str2;
str1=asctime(gmtime(&t));//使用gmtime()获得tm*
str2=asctime(localtime(&t));//使用localtime()获得tm*
//两个字符串内容相同
//输出字符串时自带换行

5.ctime()

原型

char *ctime(const time_t *time);

功能:把日期和时间转换为字符串。(英文简写形式,形如:Mon Feb 16 11:29:26 2009)ctime同asctime的区别在于,ctime是通过time_t来生成时间字符串,而asctime是通过tm结构来生成时间字符串。
使用举例

time_t t=time(0);
char* str1;
str1=ctime(&t);
//与asctime()获得的字符串内容相同
//输出字符串时自带换行

6.mktime()

原型

time_t mktime(strcut tm * timeptr);

功能:将tm时间结构数据转换成time_t。
使用举例

time_t t1=time(0),t2;
struct tm* timer;
timer=gmtime(&t1);//使用gmtime()获得tm*
t2=mktime(timer);//t1与t2大小稍有不同

7.difftime()

原型

double difftime(time_t time1, time_t time0);

功能:计算时间间隔长度,以秒为单位,且只能精确到秒。虽然该函数返回值是double类型的,但这并不说明该时间间隔具有同double一样的精度,这是由它的参数决定的。
使用举例

#include<windows.h>

time_t t1=time(0);
Sleep(5000);//Sleep()函数的单位是毫秒,此条代码的意思是程序停止5秒,函数声明在windows.h中
time_t t2=time(0);
double dt=difftime(t2,t1);//计算两时间之差,单位是秒

8.strftime()

原型

size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);
/*
参数解释:
strDest是字符指针,用来存放时间转化之后的字符串
maxsize是strDest中能够存放字符的最大个数
format是格式控制字符串
timeptr是struct tm类型的指针类型,用来指向需要转变的时间变量(struct tm类型)
返回值:该函数返回向strDest指向的字符串中放置的字符数。
*/
/*
格式控制命令
       %a 星期几的简写
  %A 星期几的全称
  %b 月份的简写
  %B 月份的全称
  %c 标准的日期的时间串
  %C 年份的后两位数字
  %d 十进制表示的每月的第几天
  %D 月/天/年
  %e 在两字符域中,十进制表示的每月的第几天
  %F 年-月-日
  %g 年份的后两位数字,使用基于周的年
  %G 年份,使用基于周的年
  %h 简写的月份名
  %H 24小时制的小时
  %I 12小时制的小时
  %j 十进制表示的每年的第几天
  %m 十进制表示的月份
  %M 十进制表示的分钟数
  %n 新行符
  %p 本地的AM或PM的等价显示
  %r 12小时的时间
  %R 显示小时和分钟:hh:mm
  %S 十进制的秒数
  %t 水平制表符
  %T 显示时分秒:hh:mm:ss
  %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
  %U 第年的第几周,把星期日作为第一天(值从0到53)
  %V 每年的第几周,使用基于周的年
  %w 十进制表示的星期几(值从0到6,星期天为0)
  %W 每年的第几周,把星期一做为第一天(值从0到53)
  %x 标准的日期串
  %X 标准的时间串
  %y 不带世纪的十进制年份(值从0到99)
  %Y 带世纪部分的十制年份
  %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
  %% 百分号
*/

功能:将时间格式化,或者说:格式化一个时间字符串。我们可以使用strftime()函数将时间格式化为我们想要的格式。
使用举例

time_t t=time(0);
char* str1;
str1=(char*)malloc(30*sizeof(char));
strftime(str1,30,"%Y-%m-%d  %H:%M:%S",gmtime(&t));//使用gmtime()获得tm*,str1存储着经过格式化的字符串
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值