这几个时间转换你用对了吗


time使用

time_t time (time_t *t)

该时间是从1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数

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

int main()
{
    time_t timep;

    long seconds = time(&timep);
    printf("time out = %ld\r\n", seconds);
    printf("time out = %ld\r\n", timep);
    return 0;
}

 


ctime使用

定义:char *ctime(const time_t *timep);

说明:将参数所指的time_t结构中的信息转换成真实世界的时间日期表示方法,然后将结果以字符串形式返回。

注意这个是本地时间。

#include <stdio.h>
#include <time.h>
int main(void)
{
    time_t timep;

    time(&timep);
    printf("ctime out=%s\r\n", ctime(&timep));
    return 0;
}


asctime使用

定义:

char *asctime(const struct tm *timeptr);

说明:

 将参数timeptr所指的struct tm结构中的信息转换成真实时间所使用的时间日期表示方法,结果以字符串形态返回。与ctime()函数不同之处在于传入的参数是不同的结构。

返回的也是UTC时间。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
    time_t timep;

    time(&timep);
    printf("asctime = %s\r\n", asctime(gmtime(&timep)));
    return 0;
}


gmtime使用

定义:struct tm *gmtime(const time_t *timep);

说明:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期未经时区转换,而是UTC时间。

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

int main(void)
{
    char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

    time_t timep;
    struct tm *p;

    time(&timep);
    p = gmtime(&timep);
    printf("year=%d,mon=%d,day=%d\r\n", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
    printf("wday=%s time=[%d:%d:%d]\r\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
    return 0;
}

 


localtime使用

与gmtime类似,但返回的是本地时间非utc时间

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

int main(void)
{
    char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

    time_t timep;
    struct tm *p;

    time(&timep);
    p = localtime(&timep);
    printf("year=%d,mon=%d,day=%d\r\n", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
    printf("wday=%s time=[%d:%d:%d]\r\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
    return 0;
}


mktime使用

定义:time_t mktime(struct tm *timeptr);

说明:

 用来将参数timeptr所指的tm结构数据转换成从1970年1月1日的UTC时间从0时0分0妙算起到现在所经过的秒数。

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

int main(void)
{
    time_t timep;
    struct tm *p;

    time(&timep);
    printf("time():%ld\r\n", timep);
    p = localtime(&timep);
    timep = mktime(p);
    printf("mktime():%ld\r\n", timep);
    return 0;
}


strftime函数

#include <time.h>

定义: 

size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

说明:

类似于snprintf函数,我们可以根据format指向的格式字符串,将struct tm结构体中信息输出到s指针指向的字符串中,最多为max个字节。当然s指针指向的地址需提前分配空间,比如字符数组或者malloc开辟的堆空间。

其中,格式化字符串各种日期和时间的详细的确切表示方法有如下多种,我们可以根据需要来格式化各种各样的含时间字符串。

    %a 星期几的简写

    %A 星期几的全称

    %b 月分的简写

    %B 月份的全称

    %c 标准的日期的时间串

    %C 年份的前两位数字

    %d 十进制表示的每月的第几天

    %D 月/天/年

返回值:

成功的话返回格式化之后s字符串的字节数,不包括null终止字符,但是返回的字符串包括null字节终止字符。否则返回0,s字符串的内容是未定义的。

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

#define BUFLEN 255
int main(int argc, char **argv)
{
    time_t t = time(NULL);
    char tmpBuf[BUFLEN];

    //格式化时间显示
    strftime(tmpBuf, BUFLEN, "%Y-%m-%d %H:%M:%S", localtime(&t));
    printf("strftime out=%s\n", tmpBuf);
    return 0;
}


strptime使用

Strftime的反向转换,格式化的字符串转成结构体的tm时间

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

int main(int argc, char **argv)
{
    char *fmt = "%Y-%m-%d-%H:%M:%S";
    char *buf = "2000-01-01-00:00:00";
    struct tm tb;
    if (strptime(buf, fmt, &tb) != NULL)
    {
        printf("operate success\r\n");

        printf("asctime = %s\r\n", asctime(&tb));
    }

    return 0;
}

 

重要结构体说明

struct tm{
 int tm_sec;/*秒数*/
 int tm_min; /*分钟*/
 int tm_hour;/*小时*/
 int tm_mday;/*日期*/
 int tm_mon; /*月份*/
 int tm_year; /*从1990年算起至今的年数*/
 int tm_wday; /*星期*/
 int tm_yday; /*从每年的1月1日开始的天数*/
 int tm_isdst; /*是否是夏令时*/
};

公众号链接:

这几个时间转换你用对了吗

扫一扫关注见更多内容

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值