前言

在我学的这些编程语言中,总是记不住它们的时间处理方式,每次用到时都要重新看,所以想着在这里记录下来,也方便用到时查找,也方便有需要的朋友们参考。

time_t和struct tm

在C语言中用time_t类型表示一个时间,通常它是一个和long一样长的整数,也就是说,在32位环境下,它是4字节,在64位环境下,它是8字节。它保存的就是一个整数值,表示了从1970-01-01 08:00:00到其所表示时间的秒数,它是一个非负整数,所以,time_t无法表示早于1970-01-01 08:00:00的时间。

一个很常用的函数就是time_t time(time_t *_v),它的参数是一个time_t类型的指针,返回一个和传入参数相等的time_t类型值。如果time()函数的参数是0,则返回当前的时间。

现在我们已经能用C语言表示一个时间了,但是这个时间只是从某个时间开始的秒数,如何表示更详细的时间细节呢?这就要用到struct tm类型了,它可以表示更具体的时间信息。

它一个结构体,我们就先看一下它的成员信息,一个struct tm类型包括以下成员:

int tm_year表示时间的年份,它的值从1900年开始算起,也就是说当其值为1的时候,表示的是1901年。因为time_t类型表示的时间范围不早于1970年,所以这个值通常不小于70。

int tm_mon表示时间是几月,它的值是0到11,0表示的是一月,而11表示的是12月。

int tm_mday表示时间是当前月的几号,其值的范围自然是根据月份不同也不相同。

int tm_wday表示时间是星期几,它的值的范围是0到6,0是星期天,1是星期一,6是星期六。

int tm_yday表示时间是当前年的第几天,要注意的是1月1号是第0天。

int tm_hour表示时间是几时。

int tm_min表示时间是几分。

int tm_sec表示时间是几秒。

int tm_isdst表示是否是夏令时。

localtime()

如何把一个time_t类型构造成struct tm类型呢?用struct tm *localtime(const time_t *_v)函数即可,注意参数和返回值都是指针类型。

#include

#include

int main()

{

time_t tt = time(0); //获取当前时间

struct tm *pst = localtime(&tt); //把time_t类型转换为struct tm类型

printf("The year is %d.\n", pst->tm_year + 1900); //别忘了要加1900

return 0;

}

上述程序输出:

The year is 2016.

mktime()

那么如何把struct tm类型转换为time_t类型呢?就用time_t mktime(struct tm *_v)函数,注意参数是指针类型。

那么如何输出时间呢?可以简单的使用char *ctime(time_t *_v)函数和char *asctime(struct tm *_v)函数,要注意的是返回的字符串结尾包含换行符\n。

#include

#include

int main()

{

struct tm st;

st.tm_year = 2016 - 1900;

st.tm_mon = 8;

st.tm_mday = 13;

st.tm_hour = 16;

st.tm_min = 30;

st.tm_sec = 0;

st.tm_isdst = 0;

time_t tt = mktime(&st);

printf("%s", asctime(&st));

printf("%s", ctime(&tt));

return 0;

}

上述程序输出:

Tue Sep 13 16:30:00 2016

Tue Sep 13 16:30:00 2016

我们自己用struct tm构造了一个时间,并且在执行mktime()函数后,tm_wday属性也会自动计算出来。

clock()

在time.h中,还有一些其他很常用的函数,比如clock_t clock()函数,clock_t也是一个整数,是typedef long clock_t;得来的。这个函数返回程序运行到这条语句所消耗的时间。单位一般是毫秒,可以通过printf("%d\n", CLOCKS_PER_SEC);这样确定,若输出1000,则证明是毫秒。

我们可以方便的用它来计算程序某一段语句所消耗的时间:

#include

#include

int main()

{

int i = 0;

printf("CLOCKS_PER_SEC: %ld\n", CLOCKS_PER_SEC);

long c = clock();

while(i < 1<<30) i++;

printf("The while loop cost %ld.\n", clock() - c);

c = clock();

for(i = 0; i < 1<<30; i++);

printf("The for loop cost %ld.\n", clock() - c);

return 0;

}

上述程序输出:

CLOCKS_PER_SEC: 1000

The while loop cost 2234.

The for loop cost 2206.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用C语言能带来一定的帮助,如果有疑问大家可以留言交流。

c语言中time函数作用,C语言中时间的基本用法小结相关推荐

  1. c语言中fopen_s函数,关于C语言中从文件读取数据时,fopen,fopen_s和fscanf,fscanf_s的函数用法(函数的用法有很大区别)...

    首先这都是针对由于VS软件的设置,一些函数的需要在函数名后面加"_s"才能使用. (或者最直接的方法程序开头加#pragma warning(disable:4996) 就什么问题 ...

  2. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  3. C语言中time函数和localtime获取系统时间和日期

    C语言中time函数和localtime获取系统时间和日期 可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算. ...

  4. c语言中getenv的作用,C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数和getenv()函数的使用详解 C语言putenv()函数:改变或增加环境变量头文件: #include4 定义函数: int putenv(const char * st ...

  5. C语言中时间的基本用法

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113358 时 ...

  6. c语言中fopen的作用,c语言fopen函数的用法

    在c语言中可以使用"fopen()"函数打开一个文件,该函数用于打开一个文件,其语法是"open("file a","r");&q ...

  7. c语言中find的作用,c语言find函数的使用方法

    c语言find函数的使用方法 发布时间:2020-04-29 11:09:07 来源:亿速云 阅读:449 作者:小新 这篇文章主要给大家介绍了关c语言find函数的使用方法,文中通过示例代码介绍的非 ...

  8. c语言中stible什么作用,C语言程序设计课后练习辅导

    <C语言程序设计课后练习辅导>由会员分享,可在线阅读,更多相关<C语言程序设计课后练习辅导(54页珍藏版)>请在人人文库网上搜索. 1.C语言程序设计课后练习辅导资料题型题干选 ...

  9. c语言中exit函数作用,c语言中exit函数 c语言中exit与break区别

    C语言中exit();怎么用? exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束. return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进 ...

最新文章

  1. Oracle高级查询之OVER (PARTITION BY ..)
  2. LeetCode-35. Search Insert Position
  3. c语言五子棋卡死,五子棋程序出错了
  4. 微型计算机每字节的最高位时,计算机应用基础考试题加答案
  5. Android之app作为服务器解决跨域问题
  6. for循环延时_单片机的独立按键学习,实现60秒循环数字的启动暂停与清零
  7. 在vs.net实现向导式窗口_萨满佳作赏析 | 精神世界,灵魂向导,力量动物(1)...
  8. VSCode 个性化配置快捷键
  9. script setup 实验性 vue 语法
  10. 一道自创的招聘测试题
  11. MyBatis_Study_004(动态代理)
  12. 七月算法机器学习 7 工作流程与模型调优 Kaggle案例泰坦尼克号问题
  13. 如何优雅的使用迅雷(Mac)
  14. 第二章、Zigbee模块参数(DRF1609H、DRF2657C)
  15. VMware安装CentOS 7.0 Fail to start media check on /dev/sr0
  16. cp -r命令 linux什么意思,linux系统里cp指的是什么意思
  17. 什么是电感_共模电感和差模电感的区别
  18. BiDi单纤双向光模块全解析
  19. python数据汇总_Python,将数据框中的每日数据汇总到每月和每季度
  20. ABAP ALV红绿黄灯5步

热门文章

  1. Word的操作技巧,轻松成为职场高手
  2. 抖音短视频数据抓取实战系列(六)——Mitmproxy+python编写监测程序
  3. 【C语言】简单实现三子棋(井字棋)小游戏
  4. upload上传图片到腾讯云,如何上传图片
  5. ACM模板(持续更新)
  6. 【JavaScript】制作一个抢红包雨页面
  7. intel汇编几种跳转的区别
  8. 物资调度(动态规划)
  9. Java飞机小项目6
  10. excel流程图连接线锁定_excel流程图难画?教你三个方法,15分钟就能画出好看高级的流程图...