专栏首页嵌入式大杂烩【C语言笔记】时间日期函数

【C语言笔记】时间日期函数

前言

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

time()函数

1、函数原型

time_t time(time_t *t);

2、函数说明

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

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

4、示例程序

#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()函数

1、函数原型

struct tm *gmtime(const time_t *timep);

2、函数说明

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;  //日光节约时间的旗标
};

3、函数返回值

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

4、示例程序

#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()函数

1、函数原型

struct tm *localtime(const time_t * timep);

2、函数说明

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

3、函数返回值

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

4、示例程序

#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()函数

1、函数原型

char *ctime(const time_t *timep);

2、函数说明

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

3、函数返回值

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

4、示例程序

#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()函数

1、函数原型

char *asctime(const struct tm * timeptr);

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

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

4、示例程序

#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()函数类似,应把这两对函数对比来看。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言代码优化的一些经验及小技巧(三)

    简单的循环可以展开以获取更好的性能,但需要付出代码体积增加的代价。循环展开后,循环计数应该越来越小从而执行更少的代码分支。如果循环迭代次数只有几次,那么可以完全...

    正念君
  • 【socket笔记】TCP、UDP通信总结

    Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做套接字,是网络通信中的一种约定。Socket编程的应用无处不在,我们平时用的QQ、微信、浏...

    正念君
  • 【DSP笔记】TI官方例程中切换RAM、FLASH工程版本的方法

    我们用Visual Studio来开发程序时,可以选择编译Debug版本,也可以选择编译Release版本。Debug版本为调试版本,Release版本为对外发...

    正念君
  • 从简单的函数Y = X开始,创建一个完整的人工神经网络

    在某些时候,你也许曾问过自己,人工神经网络的参数的来源是什么?权重的目的是什么?如果不用偏差(bias)会怎样?

    商业新知
  • 工具 | 很全的 Python 面试题

    Python语言特性 1 Python的函数参数传递 看两个例子: ? 所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。 ...

    CDA数据分析师
  • 从Y = X到构建完整的人工神经网络

    在某些时候,你也许曾问过自己,人工神经网络的参数的来源是什么?权重的目的是什么?如果不用偏差(bias)会怎样?

    AI研习社
  • 开发 | 从Y = X到构建完整的人工神经网络

    在某些时候,你也许曾问过自己,人工神经网络的参数的来源是什么?权重的目的是什么?如果不用偏差(bias)会怎样?

    AI科技评论
  • 国际电联2018年世界电信展在德班举行

    2018年9月10日,由国际电信联盟(ITU)主办的“2018年世界电信展”在南非德班国际会议中心开幕。中国邮电器材集团有限公司组织相关企业以国家展团形式参展。...

    VRPinea
  • 教你一步步扣代码解出你需要找到的加密参数

    上周的pdd很多人说看了还不会找,都找我要写一篇来教教如何扣代码的,那就应大家要求,今天来写一篇详细的扣代码过程,完全从零到一,如果对你有帮助,还望大力分享,这...

    sergiojune
  • LLVM编译器中的内置(built-in)函数

    在一些.h头文件中或者实现代码中经常会看到一些以__builtin_开头的函数声明或者调用,比如下面的头文件#include <secure/_string.h...

    欧阳大哥2013

扫码关注云+社区

领取腾讯云代金券