时间函数的简单理解和应用(time.h)

打印 上一主题 下一主题

主题 870|帖子 870|积分 2610

目录

关于时间的函数及tm结构体形貌


  • time.h头文件中常用的几个函数形貌如下:
序号函数&形貌1time_t time(time_t *tloc)
最基础的函数,计算当前时间,并返回成 time_t(aka long int)格式
而且返回值是从Epoch(1970年1月1日)算起的秒数(second),可另起变量担当返回值,也可用tloc指针吸收。2char *asctime(const struct tm *tm)
传入tm结构体参数,返回一个指向字符串的指针,它代表了结构体tm能代表的日期和时间。3char *ctime(const time_t *timep)
传入tmep指针参数,返回一个表现当地时间的字符串,当地时间是基于参数 timep。
与asctime的功能类似,区别仅为吸收的参数差别,一个是结构体tm,一个是时间戳。4struct tm *gmtime(const time_t *timep)
timep 的值被分解为 tm 结构体,并用协调世界时(UTC)(也被称为格林尼治尺度时间(GMT))表现
与localtime函数的区别在于,gmtime不思量时区的因素,始终返回UTC时间。5struct tm *localtime(const time_t *timep)
timep 的值被分解为 tm 结构,并用当地时区表现6double difftime(time_t time1, time_t time2)
返回 time1 和 time2 两个时间戳之间相差的秒数 (time1-time2)。7time t mktime(struct tm *tm)
把 tm 所指向的结构转换为一个依据当地时区的 timet值,功能与ctime相反。而且已经思量了闰年等复杂计算题目

  • 此外,还需要了解一个重要的概念,即struct tm *tm,函数原型如下:
  1. struct tm
  2. {
  3.   int tm_sec;                        /* Seconds.        [0-60] (1 leap second) */
  4.   int tm_min;                        /* Minutes.        [0-59] */
  5.   int tm_hour;                        /* Hours.        [0-23] */
  6.   int tm_mday;                        /* Day.                [1-31] */
  7.   int tm_mon;                        /* Month.        [0-11] */
  8.   int tm_year;                        /* Year        - 1900.  */
  9.   int tm_wday;                        /* Day of week.        [0-6] */
  10.   int tm_yday;                        /* Days in year.[0-365]        */
  11.   int tm_isdst;                        /* DST.                [-1/0/1]*/
  12. ...
  13. };
复制代码
由tm函数原型的注释得出,在引用tm结构体中月份和年份的时间,需要做简单的算术运算:
  1. /*
  2. 星期: stdTime->tm_wday
  3. 月份:stdTime->tm_mon + 1  日期:stdTime->tm_mday
  4. 时刻:stdTime->tm_hour  stdTime->tm_min  stdTime->tm_sec
  5. 年份:stdTime->tm_year + 1900
  6. */
复制代码
对函数的简单理解操纵
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main(int argc, char *argv[])
  5. {
  6.     time_t t = 0;
  7.     time_t curTime = time(NULL); // 从1970.1.1开始到现在的秒数
  8.     time(&t);//尝试利用time的参数接收返回值
  9.     printf("curTime=%ld \nt=%ld\n", curTime, t);//进行结果对比
  10.     struct tm *stdTime = localtime(&curTime);
  11.     printf("curTime=%s \n", ctime(&curTime));   // 使用ocaltime 函数与ctime函数进行对比
  12.     printf("Wkday:%d\nMonth:%d %d\nTime:%d %d %d\nYear:%d\n", stdTime->tm_wday, stdTime->tm_mon + 1, stdTime->tm_mday, stdTime->tm_hour, stdTime->tm_min, stdTime->tm_sec, stdTime->tm_year + 1900);
  13.     return 0;
  14. }
复制代码
函数功能实现
  1. /**
  2. * @brief 利用时间函数,每2秒在log.txt文件中输入最新时间,并覆盖原来的时间
  3. * @date 2024/05/08
  4. * CopyRight (c)  2023-2024   ni456xinmie@163.com   All Right Reseverd
  5. */
  6. #include <stdio.h>
  7. #include <time.h>
  8. #include <stdlib.h>
  9. int main(int argc, char *argv[])
  10. {
  11.     if (2 != argc) // 判断函数调用时的参数是否输入正确
  12.     {
  13.         printf("Usage:%s<dst>\n", argv[0]);
  14.         exit(1);
  15.     }
  16.     FILE *fp = NULL;           // 申请结构体指针变量
  17.     struct tm *stdTime = NULL; // 申请tm结构体变量
  18.     time_t curTime = 0;        // 申请时间戳变量
  19.     while (1)
  20.     {
  21.         /*
  22.         此处在循环体内进行打开/关闭文件并错误判断,因为如果不进行这一步,则会无法打开文件看到时间覆盖的动作。因此这一步需要根据具体设备来调整。
  23.         */
  24.         if (NULL == (fp = fopen(argv[1], "a")))//用a进行追加写入,效果更明显;不然可以直接用w进行覆盖操作
  25.         {
  26.             perror("Open failed.\n");
  27.             exit(1);
  28.         }
  29.         curTime = time(NULL);          // 获取当前时间戳
  30.         stdTime = localtime(&curTime); // 使用localtime 函数,并获取时间,传入tm结构体
  31.         if ((fprintf(fp, "%d 年 %d 月 %d 日  星期%d  %d时%d分%d秒\n", stdTime->tm_year + 1900, stdTime->tm_mon + 1, stdTime->tm_mday, stdTime->tm_wday, stdTime->tm_hour, stdTime->tm_min, stdTime->tm_sec) == EOF))
  32.             printf("Input time failed.\n"); // 对文件进行输入时间,并同时进行错误判断
  33.         fclose(fp);                         // 循环体内进行关闭文件操作,同第22行
  34.         sleep(2);
  35.     }
  36.     return 0;
  37. }
复制代码
运行后结果如下:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

千千梦丶琪

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表