@[toc]

一、源代码说明

本文介绍的是ccfree框架的时间操作函数。

函数和类的声明文件是ccfree/_ccfree.h。

函数和类的定义文件是ccfree/_ccfree.cpp。

示例程序位于ccfree/demo目录中。

编译规则文件是ccfree/demo/makefile。

二、计算机时间的表示方法

UNIX操作系统根据计算机产生的年代和应用采用1970年1月1日作为UNIX的纪元时间,1970年1月1日0点作为计算机表示时间的是中间点,将从1970年1月1日开始经过的秒数用一个整数存放,这种高效简洁的时间表示方法被称为“Unix时间纪元”,向左和向右偏移都可以得到更早或者更后的时间。

在实际开发中,对日期和时间的操作场景非常多,例如程序启动和退出的时间,程序执行任务的时间,数据生成的时间,数据处理的各环节的时间等等。

在Linux系统中,自定义了time_t类型,如下:

typedef long time_t;    // 时间值time_t为长整型long的别名。

三、获取操作系统的时间

取操作系统的时间,并把整数表示的时间转换为字符串表示的格式。

函数声明:

void LocalTime(char *out_stime,const char *in_fmt=0,const int in_interval=0);

参数说明:

stime:用于存放获取到的时间字符串。

timetvl:时间的偏移量,单位:秒,0是缺省值,表示当前时间,30表示当前时间30秒之后的时间点,-30表示当前时间30秒之前的时间点。

fmt:输出时间的格式,fmt每部分的含义:"yyyy"-年份;"mm"-月份;"dd"-日期;"hh24"-小时;"mi"-分钟;"ss"-秒,缺省是"yyyy-mm-dd hh24:mi:ss",目前支持以下格式:

"yyyy-mm-dd hh24:mi:ss""yyyymmddhh24miss""yyyy-mm-dd""yyyymmdd""hh24:mi:ss""hh24miss""hh24:mi""hh24mi""hh24""mi"

注意:

1)小时的表示方法是hh24,不是hh,这么做的目的是为了保持与数据库的时间表示方法一致;

2)以上列出了常用的时间格式,如果不能满足您应用开发的需求,请修改源代码timetostr函数增加更多的格式支持;

3)调用函数的时候,如果fmt与上述格式都匹配,stime的内容将为空。

示例(demo24.cpp)

/**  程序名:demo24.cpp,此程序演示ccfree框架中LocalTime时间函数的使用。*  作者:朱振兴 日期:20190525
*/
#include "../_ccfree.h"int main()
{char strtime[20];memset(strtime,0,sizeof(strtime));LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss",-30);  // 获取30秒前的时间。printf("strtime1=%sn",strtime);LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss");      // 获取当前时间。printf("strtime2=%sn",strtime);LocalTime(strtime,"yyyy-mm-dd hh24:mi:ss",30);   // 获取30秒后的时间。printf("strtime3=%sn",strtime);
}

四、时间转换函数

1、把整数表示的时间转换为字符串表示的时间

函数声明:

void timetostr(const time_t ltime,char *stime,const char *fmt=0);

参数说明:

ltime:整数表示的时间。

stime:字符串表示的时间。

fmt:输出字符串时间stime的格式,与LocalTime函数的fmt参数相同,如果fmt的格式不正确,stime将为空。

2、把字符串表示的时间转换为整数表示的时间

函数声明:

time_t strtotime(const char *stime);

参数说明:

stime:字符串表示的时间,格式不限,但一定要包括yyyymmddhh24miss,一个都不能少。

返回值:整数表示的时间,如果stime的格式不正确,返回-1。

示例(demo26.cpp)

/**  程序名:demo26.cpp,此程序演示ccfree框架中整数表示的时间和字符串表示的时间之间的转换。*  作者:朱振兴 日期:20190525
*/
#include "../_ccfree.h"int main()
{time_t ltime;char strtime[20];memset(strtime,0,sizeof(strtime));strcpy(strtime,"2020-01-01 12:35:22");ltime=strtotime(strtime);    // 转换为整数的时间printf("ltime=%ldn",ltime); // 输出ltime=1577853322memset(strtime,0,sizeof(strtime));timetostr(ltime,strtime,"yyyy-mm-dd hh24:mi:ss");  // 转换为字符串的时间printf("strtime=%sn",strtime);     // 输出strtime=2020-01-01 12:35:22
}

五、时间的运算

把字符串表示的时间加上一个偏移的秒数后得到一个新的字符串表示的时间。

函数声明:

bool AddTime(const char *in_stime,char *out_stime,const int timetvl,const char *fmt=0);

参数说明:

in_stime:输入的字符串格式的时间。

out_stime:输出的字符串格式的时间。

timetvl:需要偏移的秒数,正数往后偏移,负数往前偏移。

fmt:输出字符串时间out_stime的格式,与LocalTime函数的fmt参数相同。

注意:in_stime和out_stime参数可以是同一个变量的地址,如果调用失败,out_stime的内容会清空。

返回值:true-成功,false-失败,如果返回失败,可以认为是in_stime的格式不正确。

示例(demo28.cpp)

/**  程序名:demo28.cpp,此程序演示ccfree框架中采用AddTime进行时间的运算。*  作者:朱振兴 日期:20190525
*/
#include "../_ccfree.h"int main()
{time_t ltime;char strtime[20];memset(strtime,0,sizeof(strtime));strcpy(strtime,"2020-01-01 12:35:22");AddTime(strtime,strtime,0-1*24*60*60); // 减一天。printf("strtime=%sn",strtime);     // 输出strtime=2019-12-31 12:35:22AddTime(strtime,strtime,2*24*60*60); // 加两天。printf("strtime=%sn",strtime);     // 输出strtime=2020-01-02 12:35:22
}

六、计时器

CTimer类是一个精确到微秒的计时器。

类声明:

// 这是一个精确到微秒的计时器。
class CTimer
{private:struct timeval m_start;   // 开始计时的时间。struct timeval m_end;     // 计时完成的时间。// 开始计时。void Start();
public:CTimer();  // 构造函数中会调用Start方法。// 计算已逝去的时间,单位:秒,小数点后面是微秒。double Elapsed();
};

CTimer创建对象后立即开始计时,每次调用Elapsed方法获取已逝去的时间(单位:秒,小数点后面是微秒),并重新开始计时。

示例(demo29.cpp)

/**  程序名:demo29.cpp,此程序演示ccfree框架中的CTimer类(计时器)的用法。*  作者:朱振兴 日期:20190525
*/
#include "../_ccfree.h"int main()
{CTimer Timer;printf("elapsed=%lfn",Timer.Elapsed());sleep(1);printf("elapsed=%lfn",Timer.Elapsed());sleep(1);printf("elapsed=%lfn",Timer.Elapsed());usleep(1000);printf("elapsed=%lfn",Timer.Elapsed());usleep(100);printf("elapsed=%lfn",Timer.Elapsed());sleep(10);printf("elapsed=%lfn",Timer.Elapsed());
}

运行效果

从demo29运行的效果上看,好像计时有误差,同样是睡1秒,实际耗时却是1.000126或1.000171,这是因为程序本身执行需要时间,虽然时间很短,那也是需要时间。

24小时计时器设计logisim_c++日期、时间和计时器相关推荐

  1. IBM服务器修改时间为24小时制,产品国际化——日期和时间格式(二)

    印尼语: 1.hh:mm 英语:06:05 印尼语:6:05 注:印尼使用24小时制所以应为H:mm 2.yyyy-MM-dd dddd 英语:2016-02-29 Monday 印尼语:Senin, ...

  2. kindle可以设置24小时吗_Kindle | 怎样安排时间读书?

    阅读的时间: 1.早上5:30-6:00起床,有将近1小时的整块阅读时间,如果时间充足一点,会做些笔记. 2.包里放上7寸的阅读设备(以前是K3,这段时间换成NT),放上几十本排版不错的电子书,在有时 ...

  3. 根据12和24小时制选择不同的时间显示

    <HTML> <HEAD> <TITLE>时间日期篇--当前时间</TITLE> <meta charset="utf-8"& ...

  4. java计算24小时之内_java的系统时间,怎么计算从现在到凌晨还剩下多少时间?

    Apache commons-lang3 long milliSecondsLeftToday = 86400000 -DateUtils.getFragmentInMilliseconds(Cale ...

  5. php怎么把日期加时间,将小时分钟添加到日期时间 - php

    任何人都可以帮助我解决长时间困扰的问题,我正在尝试添加时间,例如格式为h:ia的小时和分钟,格式为01:00(一个小时),00:30(30分钟), 02:00(两个小时)等.在php中. 因为我有几个 ...

  6. 通过时间管理充分利用一天24小时

    问题:你每天24小时是如何度过的? 不知道你是否有过这种感觉: 一天工作下来,各种事项排得满满的,甚至,加班了也觉得事情怎么都做不完. 但是,问到说这一天24小时内都做了什么? 突然陷入深思:感觉今天 ...

  7. Centos修改时间为24小时制

    今天程序报了个时间异常,发现是因为服务器上的时间按照12小时制显示.以至于时间出错了. 怎么办,改呗. 确认是否24小时制 先确认下时间是否是24小时制 输入以下命令 date 说明时间确实是12小时 ...

  8. 时间大盗:用ac -d查看用户每天在线时长,居然高于24小时

    ac是linux下很有意思的命令,可以统计用户的在线时长 按man ac的解释 AC(1) General Commands Manual AC(1)NAMEac - print statistics ...

  9. dede日期时间标签调用大全

    dedecms最强大的功能就是调用标签,可以变换出各种样式的文章形式出来,本节将DEDECMS调用时间的样式做一个总结,基本所有的时间调用样式都有了,日期时间格式 (利用strftime()函数格式化 ...

  10. 一文告诉你Java日期时间API到底有多烂

    前言 你好,我是A哥(YourBatman). 好看的代码,千篇一律!难看的代码,卧槽卧槽~其实没有什么代码是"史上最烂"的,要有也只有"史上更烂". 日期是商 ...

最新文章

  1. Py之yacs:yacs的简介、安装、使用方法之详细攻略
  2. springboot+mybatis实现数据分页(三种方式)
  3. Spring Boot笔记-IDEA使用JPA映射时解决cannot resolve column或cannot resolve table
  4. 值得收藏!UI设计学习借鉴常用网站
  5. 修改 javascript 中alert样式
  6. css/js在线压缩工具
  7. 制作ext4 img的两种方式
  8. 数据结构与算法 c语言6,C语言程序设计题库之6.doc
  9. BMNNSDK部署Sophone算丰智算盒SE5系列教程(超详细版)
  10. oracle18c安装教程6,Oracle 18c rpm 安装及解析安装过程
  11. GO语言开源项目TOP 100
  12. 虾米音乐的一个小功能
  13. php bouncy castle,基础才是重中之重~BouncyCastle实现的DES3加密~java通用
  14. 用python给女朋友惊喜_怎样用Python讨您的女朋友欢心(附源码)?女孩很好哄的嘛! zt...
  15. pyTorch 图像分类模型训练教程
  16. windows phone 7---8 Belling's课堂(十五) 程序等待页面的处理
  17. RTX51tiny 延时长度计算
  18. 算法系列——组合总数(Combination Sum)
  19. 经典的电工电路图(转载的)
  20. BDG邦德外汇:财富的时间载体

热门文章

  1. 虚拟机克隆MAC地址变更后的网络配置
  2. SQL基础知识总结二
  3. RHCE认证培训+考试七天实录(七)
  4. pytest(2) pytest与unittest的区别
  5. 定位CPU高问题三把斧
  6. HDU 3729【二分匹配】
  7. 信息安全之程序实现简单替换加密,并用字母频率统计进行破解
  8. UVa 10286 - Trouble with a Pentagon
  9. Centos系统设置
  10. 从程序员到项目经理:原来一切问题都是可以解决的