C语言 | 时间日期函数

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

前言

time.h是C/C++中的日期和时间头文件。用于需要时间方面的函数。下面分享time.h头文件中几个常用函数的用法:

time()函数

函数原型

time_t time(time_t *t);

函数说明

time_t 是long int 类型。此函数会返回从公元1970年1月1日的UTC时间从0时0 分0秒算起到现在所经过的秒数。如果t是空指针,直接返回当前时间。如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间。

函数返回值

成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。

示例程序

#include <stdio.h>
#include <time.h>
int main(void)
{
    time_t sec = time((time_t*)NULL);
    printf("1970-01-01至现在的秒数为:%d\n", sec);
  
   return 0;
}

输出结果

1970-01-01至现在的秒数为:1542377079

gmtime()函数

函数原型

struct tm *gmtime(const time_t *timep);

函数说明

gmtime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构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;  //从今年1 月1 日算起至今的天数, 范围为0-365
    int tm_isdst;  //日光节约时间的旗标
};

函数返回值

返回结构tm代表目前UTC时间。

示例程序

#include <stdio.h>
#include <time.h>
int main(void)
{
    char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    time_t t;
    struct tm *p;
    int year = 0, mon = 0, mday = 0;
    int hour = 0, min = 0, sec = 0;
    char *week = NULL;

    time(&t);
    p = gmtime(&t);
    year = 1900 + p->tm_year;
    mon = 1 + p->tm_mon;
    mday = p->tm_mday;
    week = wday[p->tm_wday];
    hour = 8 + p->tm_hour; //获取当地时间,与UTC时间相差8小时   
    min = p->tm_min;
    sec = p->tm_sec;
    printf("%d-%d-%d %s", year, mon, mday, week);
    printf(" %.2d:%.2d:%.2d\n", hour, min, sec);
  
    return 0;
}

输出结果

2018-11-16 Fri 22:23:25

localtime()函数


函数原型

struct tm *localtime(const time_t * timep);

函数说明

localtime()将参数timep所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。

函数返回值

返回结构tm代表目前的当地时间。

示例程序

#include <stdio.h>
#include <time.h>
int main(void)
{
    char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    time_t t;
    struct tm *p;
   int year = 0, mon = 0, mday = 0;
   int hour = 0, min = 0, sec = 0;
   char *week = NULL;
  
    time(&t);
    p = localtime(&t); //取得当地时间
   year = 1900 + p->tm_year;
   mon = 1 + p->tm_mon;
   mday = p->tm_mday;
   week = wday[p->tm_wday];
   hour = p->tm_hour;
   min = p->tm_min;
   sec = p->tm_sec;
  
    printf("%d-%d-%d %s", year, mon, mday, week);
    printf(" %.2d:%.2d:%.2d\n", hour, min, sec);
  
   return 0;
} 

输出结果

2018-11-16 Fri 22:32:27

ctime()函数

函数原型

char *ctime(const time_t *timep);

函数说明

ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间。注意:若再调用相关的时间日期函数,此字符串可能会被破坏

函数返回值

返回一字符串表示目前当地的时间日期。格式:星期,月,日,小时:分:秒,年。

示例程序

#include <stdio.h>
#include <time.h>
int main(void)
{
    time_t t;
    time(&t);
    printf("%s\n", ctime(&t));
  
   return 0;
}

输出结果

Fri Nov 16 22:38:51 2018

asctime()函数

函数原型

char *asctime(const struct tm * timeptr);

函数说明

asctime()将参数timeptr所指的tm结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间。注意:若再调用相关的时间日期函数,此字符串可能会被破坏。与ctime()函数的不同在于传入参数结构不同。

函数返回值

返回一字符串表示目前当地的时间日期。格式:星期,月,日,小时:分:秒,年。

示例程序

#include <stdio.h>
#include <time.h>
int main(void)
{
    time_t t;
   struct tm *p;
   char *date = NULL;
  
    time(&t);
   p = gmtime(&t);
   date = asctime(p);
  
    printf("%s\n", date);
  
   return 0;
}

输出结果

Fri Nov 16 14:48:29 2018

以上就是关于time.h头文件里一些时间函数的介绍。其中gmtime()函数与localtime()函数类似,ctime()函数与asctime()函数类似,应把这两对函数对比来看。

本文示例程序可在微信公众号【嵌入式大杂烩】后台回复:time,即可获取

参考资料:百度百科及C语言中文网

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式大杂烩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值