项目场景:

想要实现一个失效时间的生成(当前时间+失效期间)

比如是需要获得当前时间的后90秒或者是前多少秒。

问题描述

C语言中好像没有相关的函数可以直接计算时间的,要么自己写个函数来实现,这样的虽然能够实现,但是工程量有点大。


解决方案:

下面我用两个方案来解决这个问题。

1.首先就是比较笨的方法,那就是自写个函数来实现当前时间的后90秒的时间,下面是函数的实现:

#include<stdio.h>char* getdt(char* time, int n) {int yyyy = 0;int mm1 = 0;int dd = 0;int hh = 0;int mm2 = 0;int ss = 0;int dd_check;static char time_out[14 + 1];memset(time_out, 0x00, sizeof(time_out));sscanf_s(time, "%4d%2d%2d%2d%2d%2d", &yyyy, &mm1, &dd, &hh, &mm2, &ss);//printf("%4d%2d%2d%2d%2d%2d\n", yyyy, mm1, dd, hh, mm2, ss);//判断是否为闰年if ((yyyy % 4 == 0 && yyyy % 100 != 0) || (yyyy % 400 == 0)) {dd_check = 29;}else {dd_check = 28;}//从秒开始加,秒数超过60就分钟+1ss += 90;if (ss >= 60) {mm2 += ss / 60;ss %= 60;}//分钟超过60就小时+1if (mm2 >= 60) {hh += mm2 / 60;mm2 %= 60;}//小时超过24就日期+1if (hh >= 24) {dd += hh / 24;hh %= 24;}//日期超过dd_check就月份+1if (dd > dd_check) {mm1 += dd / dd_check;dd %= dd_check;}//月份超过12就年份+1if (mm1 > 12) {yyyy += mm1 / 12;mm1 %= 12;}sprintf(time_out, "%04d%02d%02d%02d%02d%02d", yyyy, mm1, dd, hh, mm2, ss);return time_out;
}int main() {char nowtime[] = "20221203123445";char* aftertime = getdt(nowtime, 90);printf("%s\n", aftertime);
}

上面函数的大致思路就是根据先把秒数加上秒数,然后逢时间月日时分秒的进制就往上面加,好处就是这个可以自选定时间,不足处就是代码量有点大,而且要是需要时间的前多少秒的话,还需要修改代码段。

2.利用c自带的time.h里的函数来实现,代码如下:

#include<stdio.h>
#include<time.h>int main() {time_t tm1; //定义一个time_t类型用于捕捉时间戳(time_t相当于long类型)struct tm* ftm1;    //定义struct tm指针,->有各种时间的成员变量struct tm* ftm2;time(&tm1); //获取当前时间的时间戳(秒数)printf("%ld\n", tm1);time_t latetime = tm1 + 90; //时间戳加减你需要的秒数,这里是后90秒printf("%ld\n", latetime);ftm1 = localtime(&tm1); //将秒数换成struct tm结构体printf("%04d%02d%02d%02d%02d%02d\n", ftm1->tm_year + 1900, ftm1->tm_mon + 1, ftm1->tm_mday, ftm1->tm_hour, ftm1->tm_min, ftm1->tm_sec);//两个localtime放在一起,好像会被覆盖ftm2 = localtime(&latetime);printf("%04d%02d%02d%02d%02d%02d\n", ftm2->tm_year + 1900, ftm2->tm_mon + 1, ftm2->tm_mday, ftm2->tm_hour, ftm2->tm_min, ftm2->tm_sec);return 0;
}

实际上,这个思路就是先取得当前时间的秒数(也就是距离1970.1.1的总秒数),然后加减你需要的秒数,然后通过loacltime函数得到struct tm结构体的返回值,这样也就拿到计算后的时间了。优点就是代码量少,可以计算时间前后秒数的时间,缺点就是只能是当前时间,不能选定某个时间。

最后补充一下time.h里的时间类型:

time_t :这个是用来存储unix时间戳的类型,大部分系统是定义为long型。
struct tm:一个用来保存时间和日期的结构。

struct tm {int tm_sec;         /* 秒,范围从 0 到 59      */int tm_min;         /* 分,范围从 0 到 59      */int tm_hour;        /* 小时,范围从 0 到 23     */int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */int tm_mon;         /* 月,范围从 0 到 11(注意)  */int tm_year;        /* 自 1900 年起的年数      */int tm_wday;        /* 一周中的第几天,范围从 0 到 6 */int tm_yday;        /* 一年中的第几天,范围从 0 到 365   */int tm_isdst;       /* 夏令时               */
};

有更加优化的方法欢迎有劳各位大佬评论区告知

C语言实现当前时间的前后多少秒的时间计算相关推荐

  1. MySQL ADDTIME(t,n) 时间 t 加上 n 秒的时间

  2. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的不同标记物情况下对应的AUC曲线、并进行对比

    R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值.R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的不同标记物情况下对应的AUC曲线.并进行对比 目录

  3. R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot)

    R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot) 目录

  4. R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注、特殊区域标注

    R语言ggplot2可视化时间序列数据并突出标注重要时间点数据实战:特殊节点标签标注.特殊区域标注 目录

  5. Python语言学习之时间那些事:python和时间的使用方法之详细攻略

    Python语言学习之时间那些事:python和时间的使用方法之详细攻略 目录 python和时间那些事 1.获取当前时间的几种方法 2.计算代码前后运行时间 python和时间那些事 1.获取当前时 ...

  6. # c语言版:实例:输入一个时间值s,它是距离当日午夜的秒值,计算目前的时间,时间按00:00:00格式输出

    c语言版:实例:输入一个时间值s,它是距离当日午夜的秒值,计算目前的时间,时间按00:00:00格式输出 前言:c语言版本 对于c语言的基础复习 对于if选择判断语句的理解 浮点型输出 提示:以下是本 ...

  7. C语言实现秒与时间的互相转换

    C语言实现秒与时间的互相转换 工作中遇到实时时间的显示,MCU中使用1s计数值累加实现秒钟的每秒累加.因此需要用到秒数值与具体时间日期的互相转换,在网上找的例程跑起来总是各种各样的小错误,浪费了大量的 ...

  8. R语言Sys.Date函数获取当前日期、将独立的年、月、日、时间、分钟、秒信息转化为对应的时间信息

    R语言Sys.Date函数获取当前日期.将独立的年.月.日.时间.分钟.秒信息转化为对应的时间信息 目录

  9. R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值、使用cox模型、并添加协变量、R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线

    R语言使用timeROC包计算无竞争情况下的生存资料多时间AUC值.使用cox模型.并添加协变量.R语言使用timeROC包的plotAUCcurve函数可视化多时间生存资料的AUC曲线 目录

最新文章

  1. C++中的new和delete用法
  2. 解决Delphi7的自带的UTF-8编码转换函数BUG
  3. Websocket 百万长连接技术,在石墨文档中的实践
  4. tensorflow随笔-读取图像文件数据(1)
  5. 直播预告 | 全国高校人工智能人才与科技莫干山论坛直播来袭!
  6. 关联规则挖掘算法_基于Apriori关联规则的协同过滤算法
  7. php mysql删除失败_php+MySQL实战案例【七】数据编辑、删除
  8. 科研牛人是如何看文献的?
  9. 设备接入服务,看完这篇给你整的明明白白
  10. 软件工程第八次作业——例行报告
  11. 揭秘世界首位机器人公民:按照赫本形象设计、曾扬言毁灭人类
  12. linux下无法执行PHP命令,错误 php: command not found
  13. 情人节程序员用HTML网页表白【时光不老,我们不散love520】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  14. 机器学习笔记 - 什么是t-SNE?
  15. 超级好上手的告白小程序
  16. Python的正则表达式和re模块
  17. 新版百度地图的覆盖物描述
  18. python点云可视化工具_救命!点云可视化(不需配置PCL)
  19. javascript案例31——简易ATM机、简易银行、存钱取钱。
  20. AR(增强现实)技术是什么,未来发展会怎样

热门文章

  1. 简序《1912青年空间诗话之春》
  2. 【程序】Altera FPGA NIOS实现Scatter-Gather DMA(SGDMA)收发回环测试,描述符和缓冲区全部放在同一块SDRAM里面
  3. 移动端APP热更新方案(iOS+Android)
  4. 多边形画椭圆算法java_运用椭圆画法,45行代码画出任意正多边形
  5. 解决js小数加减法精确度问题
  6. 计算机网络技术网络建设小结,计算机网络精品课程建设总结报告.doc
  7. python实现ID3
  8. web漏洞--注入漏洞
  9. proteus8的简单运用
  10. 伺服控制原理 及RT and IRT