欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言中如何获取时间

程序员文章站 2022-03-09 23:31:51
...

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

谢谢阅读

相关标签: C 时间函数