011_C标准库函数之<time.h>

头文件<time.h>中说明了一些用于处理日期和时间的类型和函数。其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同。clock_t和time_t是两个用于表示时间的算术类型,而struct tm则用于存放日历时间的各个成分。tm的各个成员的用途及取值范围如下:

int tm_sec; /* 秒,0~61 */
int tm_min; /* 分,0~59 */
int tm_hour; /* 时,0~23 */
int tm_mday; /* 日,1~31 */
int tm_mon; /* 月(从1月开始),0~11 */
int tm_year; /* 年(从1900年开始) */
int tm_wday; /* 星期(从周日开始),0~6 */
int tm_yday; /* 天数(从1月1日开始),0~365 */
int tm_isdst; /* 夏令时标记 */

其中,tm_isdst在使用夏令时时其值为正,在不使用夏令时时其值为0,如果该信息不能使用,其值为负

注:

typedef long clock_t;

typedef long long time_t;

// The number of clock ticks per second
#define CLOCKS_PER_SEC  ((clock_t)1000)

#define TIME_UTC 1

【函数1:clock 】

【格式】

clock_t clock(void);

【功能】

返回程序自开始执行到目前为止所占用的处理机时间。如果处理机时间不可使用,那么返回-1。clock()/CLOCKS_PER_SEC是以秒为单位表示的时间

【入参】

void:入参为空(无需参数)

【返回值】

clock_t类型的时间数值

【test_code】

【总结】

1.可能在使用clock函数的时候,获取到的时间会为0,这个如下:

可以看出,当num = 1000时,ttmp打印出来,是0所以在验证的时候注意次数的设置,因为cpu处理数据是很快的,我们尽量多给点数据,这样才看的清楚

【函数2:time 】

【格式】

time_t time(time_t *tp);

【功能】

返回当前日历时间。如果日历时间不能使用,则返回-1。如果tp不为NULL,那么同时把返回值赋给*tp

【入参】

time_t *tp:time_t类型的指针,或者NULL,或者0

【返回值】

time_t类型数据,单位为秒

【test_code】

【总结】

这个函数计算的时间值是:格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒

【函数3:difftime 】

【格式】

double difftime(time_t time2, time_t time1);

【功能】

返回time2-time1的值(以秒为单位)

【入参】

time_t time2:第一个时间值

time_t time1:第二个时间值

【返回值】

double类型的时间差值

【test_code】

【总结】

注意difftime函数的第一个参数是后者的时间值,第二个参数是前者的时间值,不要入参入错了顺序!

【函数4:mktime 】

【格式】

time_t mktime(struct tm *tp);

【功能】

将结构*tp中的当地时间转换为time_t类型的日历时间,并返回该时间。如果不能转换,则返回-1

【入参】

struct tm *tp:结构指针tp

【返回值】

time_t类型的时间值

【test_code】

【总结】

这个函数计算的时间值是:格林尼治时间1970年1月1日00:00:00到当前时刻的时长,时长单位是秒

【函数5:asctime 】

【格式】

char *asctime(const struct tm *tp);

【功能】

将结构*tp中的时间转换成如下所示的字符串形式:

day month date hours:minutes:seconds year\n\0

如:

Fri Apr 15 15:14:13 2005\n\0

返回指向该字符串的指针。字符串存储在可被其他调用重写的静态对象中

【入参】

struct tm *tp:结构指针tp

【返回值】

char *指针,

【test_code】

【总结】

注意入参格式,是结构指针,可以用localtime(&tmp)的返回直接入参,即:asctime(localtime(&tmp));

【函数6:ctime 】

【格式】

char *ctime(const time_t *tp);

【功能】

将time_t类型的时间转换为当地时间的字符串,并返回指向该字符串指针。字符串存储在可被其他调用重写的静态对象中。等价于如下调用:

asctime(localtime(tp));

【入参】

const time_t *tp:入参为一个常量指针(关于这个知识点不清楚的话,可以看这篇文章005_指针常量与常量指针-CSDN博客)

【返回值】

返回指向该字符串的指针

【test_code】

【总结】

注意这个和asctime的入参区别

【函数7: gmtime】

【格式】

struct tm *gmtime(const time_t *tp);

【功能】

将time_t类型的时间转换成struct tm结构形式的国际标准时间(UTC),并返回指向该结构的指针。如果转换失败,返回NULL。结构内容存储在可被其他调用重写的静态对象中。

【入参】

const time_t *tp:入参为一个常量指针

【返回值】

返回指向struct tm该结构的指针

【test_code】

【总结】

注意入参为一个指针,且返回的是struct tm*类型的结构数据

【函数8:localtime】

【格式】

struct tm *localtime(const time_t *tp);

【功能】

将*tp中的日历时间转换成struct tm结构形式的本地时间,并返回指向该结构的指针。结构内容存储在可被其他调用重写的静态对象中

【入参】

const time_t *tp:入参为一个常量指针

【返回值】

返回指向struct tm该结构的指针

【test_code】

【总结】

注意返回是struct tm* tmp;接收的时候需要对应的;入参为time_t *tp;

【函数9:strftime】

【格式】

size_t strftime(char *s, size_t smax, const char *fmt, const struct tm *tp);

【功能】

根据fmt的格式说明把结构*tp中的日期与时间信息转换成指定的格式,并存储到s所指向的数组中,写到s中的字符数不能多于smax。函数返回实际写到s中的字符数(不包括'\0');如果产生的字符数多于smax,则返回0。

fmt类似于printf()中的格式说明,它由0个或多个转换规格说明与普通字符组成。普通字符原封不动的拷贝到s中,每个%c按照下面所描述的格式用与当地环境相适应的值来替换。转换规格列表如下:

【入参】

char *s:字符数组

size_t smax:数组最多写入的字符数

 const char *fmt:要打印的时间格式

const struct tm *tp:struct tm*类型的结构时间

【返回值】

函数返回实际写到s中的字符数(不包括'\0');如果产生的字符数多于smax,则返回0。

【test_code】

【总结】

此函数最主要的就是已自己需要的格式对时间和日期进行打印,那么这个const char* fmt的格式就要确定好

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值