C语言中如何获取时间

C语言的时间函数,使用这些函数时要加入头文件time.h

函数说明
char *asctime(const struct tm *tm)将时间日期以字符串格式表示
char *asctime_r(const struct tm *tm,char *buf)将时间日期以字符串格式表示,加了缓冲器存放返回值
char *ctime(const time_t *timep)将时间日期以字符串格式表示
char *ctime_r(const time_t *timep,char *buf)将时间日期以字符串格式表示,加了缓冲器存放返回值
struct tm *gmtime(const time_t *timep)获取当前时间和日期
struct tm *gmtime_r(const time_t *timep, const tm *result)获取当前时间和日期,result用于存放返回值
struct tm *localtime(const time_t *timep)获取当前时间和日期并转换为本地时间
struct tm *localtime_r(const time_t *timep, const tm *result)获取当前时间和日期并转换为本地时间,result用于存放返回值
time_t mktime(struct tm *tm)将时间转换成经过的秒数,起点为1970-1-1 00:00:00
time()获取当前时间(以秒数表示)

demo代码test.c:

#include <stdio.h>
#include <time.h>

int main(){
        time_t timetemp;  //定义一个时间结构体变量
        struct tm *p;  //定义一个结构体指针
        time(&timetemp); //获得时间
        p = localtime(&timetemp);
        printf("%d:%d:%d\n",p->tm_hour,p->tm_min,p->tm_sec);
        return 0;
}

编译运行:

~/Desktop/myC$ gcc test.c -o test
~/Desktop/myC$ ./test
18:30:48

tm为时间信息结构体:

#ifndef _TM_DEFINED
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代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的时候,tm_isdst为0;不了解情况时,tm_isdst()为负。
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
#define _TM_DEFINED
#endif

time_t 为长整型的别名

<time.h>
#ifndef __TIME_T
#define __TIME_T     /* 避免重复定义 time_t */
typedef long     time_t;    /* 时间值time_t 为长整型的别名*/
#endif

最后,再给一个综合性demo

#include <stdio.h>
#include <time.h>
int main(){
        time_t timetemp;
        struct tm *p;
        time(&timetemp);

        p = localtime(&timetemp);
        printf("localtime:%d:%d:%d\n",p->tm_hour,p->tm_min,p->tm_sec);

        struct tm result1;
        struct tm *p2 = localtime_r(&timetemp,&result1);
        printf("localtime_r:%d:%d:%d\n",result1.tm_hour,result1.tm_min,result1.tm_sec);

        char* t = asctime(p);
        printf("asctime:%s\n",t);


        //asctime_r是asctime的扩展,提供了缓冲器,用于存放返回值,缓冲器长度不能小于26
        char buf[26];
        char* t1 = asctime_r(p,buf);
        printf("asctime_r:%s\n",t1);

        char* t2 = ctime(&timetemp);
        printf("ctime:%s\n",t2);

        char buf1[26];
        char* t3 = ctime_r(&timetemp,buf1);
        printf("ctime_r:%s\n",t3);

        p = gmtime(&timetemp);
        printf("gmtime:%d:%d:%d\n",p->tm_hour,p->tm_min,p->tm_sec);

        struct tm result;
        struct tm *p1 = gmtime_r(&timetemp,&result);
        printf("gmtime_r:%d:%d:%d\n",p1->tm_hour,p1->tm_min,p1->tm_sec);

        time_t sec = mktime(p1);
        printf("mktime:%ld\n",sec);

        return 0;
}
      

编译运行:

~/Desktop/myC$ gcc test.c -o test
~/Desktop/myC$ ./test
localtime:19:40:56
localtime_r:19:40:56
asctime:Tue Apr  2 19:40:56 2019

asctime_r:Tue Apr  2 19:40:56 2019

ctime:Tue Apr  2 19:40:56 2019

ctime_r:Tue Apr  2 19:40:56 2019

gmtime:11:40:56
gmtime_r:11:40:56
mktime:1554176456

谢谢阅读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值