先说一下c++标准库并没有提供所谓的日期类型,而是继承了c的日期类型

<cmath>里面有些常用的函数,比如计时函数clock()、获取系统时间的函数time(),下面就具体的介绍一下

1. clock()

c++中对clock()的定义为:clock_t clock(void);可以看出,clock为无参函数,返回clock_t型数据;它用于计算从程序启动到调用该函数所占用

cpu的时间,若时间不可取,返回-1;默认计算时间为毫秒(ms)。下面说一下具体用法,先上代码

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
clock_t start1=clock(); //计时开始
for(int i=;i<;)
{
++i;
}
clock_t end1=clock(); //计时结束
clock_t start2=clock(); //计时开始
for(int i=;i<;i++)
{
++i;
}
clock_t end2=clock(); //计时结束
cout<<"第一个for循环运行时间:"<<end1-start1<<"ms\n";
cout<<"第二个for循环运行时间:"<<end2-start2<<"ms\n";
cout<<"整个程序运行时间:"<<clock()<<"ms\n";
return ;
}

结果如下图

第二个for循环运行时间基本上是第一个的2倍,整个程序的运行时间基本就是两个for循环执行时间的总和。另外,现在输的出的时间是毫秒,也可以

让输出的时间是秒s,这里就要介绍一下CLOCKS_PER_SEC了。CLOCKS_PER_SEC是定义在头文件"time.h"中的一个常量,表示一秒钟有多少个

时钟计时单元,若要输出时间为秒,就要用到这个常量。用法为:(double)  clock()/CLOCKS_PER_SEC;只需要改一下上面的程序就行了,代码如下:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
clock_t start1=clock(); //计时开始
for(int i=;i<;)
{
++i;
}
clock_t end1=clock(); //计时结束
clock_t start2=clock(); //计时开始
for(int i=;i<;i++)
{
++i;
}
clock_t end2=clock(); //计时结束
cout<<"第一个for循环运行时间:"<<(double)(end1-start1)/CLOCKS_PER_SEC<<"s\n";
cout<<"第二个for循环运行时间:"<<(double)(end2-start2)/CLOCKS_PER_SEC<<"s\n";
cout<<"整个程序运行时间:"<<(double)clock()/CLOCKS_PER_SEC<<"s\n";
return ;
}

运行结果如下:

可以看到,输出的时间变成了秒。

2. 下面再说一下如何获取系统日期和时间

先介绍几个函数,这些函数在"time.h"头文件中的定义直接给了出来,方便理解。介绍这些函数之前先说一个概念——协调世界时,又叫世界标准时间,简写为UTC;

世界标准时间也就是常说的格林尼治时间。世界标准时间比中国区时间慢8小时(或者说晚8小时),二者总是相差8;如果UTC时间为:2020/04/23   8:00,那么中国

区时间为:2020/04/23   16:00。

(1) time_t time(time_t *time);函数time()返回time_t型数据;参数为time_t型指针,一般设置成空指针NULL或0;函数返回系统当前的日历时间,自

1970年1月1日以来所经历的秒数,这里要特别强调一下是所经历的秒数撒;若系统没有时间则返回1。

(2) char* ctime(const time_t *time);返回一个表示当地时间(中国区时间)的字符串指针,通过这个指针可以以字符串的形式输出时间。

(3) struct tm* localtime(const time_t *time);把日历时间转化为本地时间;返回一个指向表示当地时间(即中国区时间)的tm结构体,tm结构体保存了这个本地时间,tm

在"time.h"头文件中有定义,可以用tm来声明一个指向此类型结构体的指针,下面来具体说一下tm结构体类型。tm结构体类型把日期和时间以c结构体的形式封装了

起来,里面包含了年、月、日、时、分、秒等。具体如下:

struct tm

{

int tm_sec;    //秒,[0,59]

int tm_min;//分钟,[0,59]

int tm_hour;//小时,[0,23]

int tm_year;//年,用的时候要加1900

int tm_mon;//月,用的时候加1,因为范围是[0,11]

int tm_mday;  //日,[0,31]

int tm_wday;//表示星期几,[0,6]

int tm_isdst; //没用过,也没查过

}

(4) struct tm* gmtime(const time_t *time); 这个函数和第(3)个函数有点类似,只不过它是把日历时间转化为世界标准时间,其他的基本和第(3)个函数一样。

(5) size_t strftime();有四个参数,该函数可用于格式化日期和时间为指定格式来输出。

另外说一下,clock_t、time_t、size_t、tm这四个类型能把系统时间和日期表示为某种整数。下面是具体用法,还是上代码

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
time_t t=time(); //返回自1970/01/01以来所经历的秒数
char *pt=ctime(&t);
tm *dt=localtime(&t);
cout<<"所经历的秒数:"<<t<<"\n";
cout<<pt; //以字符串的形式输出当地时间,格式为系统默认的
cout<<"本地时间: ";
cout<<dt->tm_year<<"/"<<dt->tm_mon<<"/"<<dt->tm_mday<<" 星期"<<dt->tm_wday<<" "; //输出结构体中的日期和时间
cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
dt=gmtime(&t);
cout<<"世界标准时间:";
cout<<dt->tm_year<<"/"<<dt->tm_mon<<"/"<<dt->tm_mday<<" 星期"<<dt->tm_wday<<" "; //输出结构体中的日期和时间
cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
return ;
}

运行结果如下:

注意看本地时间与UTC的年和月是否和你电脑上的时间一样,还有本地时间和UTC是否相差8。既然本地时间的年和月与电脑上的时间不一样,那咋回事呢 ?

前面我说过年和月在使用的时候要分别加1900、1。 就是这个:  int tm_year;//年,用的时候要加1900;int tm_mon;//月,用的时候加1,因为范围是[0,11]

所以只要把上面的程序改一下就好了,改好的程序如下

 #include<iostream>
#include<ctime>
using namespace std;
int main()
{
time_t t=time(); //返回自1970/01/01以来所经历的秒数
char *pt=ctime(&t);
tm *dt=localtime(&t);
cout<<"所经历的秒数:"<<t<<"\n";
cout<<pt; //以字符串的形式输出当地时间,格式为系统默认的
cout<<"本地时间: ";
cout<<dt->tm_year+<<"/"<<dt->tm_mon+<<"/"<<dt->tm_mday<<" 星期"<<dt->tm_wday<<" "; //输出结构体中的日期和时间
cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
dt=gmtime(&t);
cout<<"世界标准时间:";
cout<<dt->tm_year+<<"/"<<dt->tm_mon+<<"/"<<dt->tm_mday<<" 星期"<<dt->tm_wday<<" "; //输出结构体中的日期和时间
cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
return ;
}

可以看出,在之前的程序的第12行和16行改了一下,加上了1900和1。运行结果如下:

现在就没有错误了

另外本文写的可能不够详细,可以看一下这个,写的比较详细:https://www.cnblogs.com/zhengfa-af/p/8312915.html

写这篇文章我花了一下午的时间,最后还发生了一个插曲,就是在写到最后的时候,电脑卡住了,显示无响应,页面一直无法操作,等了一会还是不行,没办法只能重启,

md心态爆炸,一下午白搞了,真的要被气死,不过晚上还是给搞完了,我感觉以后得用苹果的电脑了。

c++<ctime>中常用函数的更多相关文章

  1. LoadRunner中常用函数参考手册

    基础篇1:LoadRunner中常用函数参考手册 常用函数列表 web_url web_submmit_form VS web_submmit_data VS web_custom_request w ...

  2. OpenCV图像处理中常用函数汇总(1)

    //俗话说:好记性不如烂笔头 //用到opencv 中的函数时往往会一时记不起这个函数的具体参数怎么设置,故在此将常用函数做一汇总: Mat srcImage = imread("C:/Us ...

  3. JavaScript中常用函数(入门级)(持续更新)

    本文中枫竹梦介绍一些JavaScript中入门级的常用函数,对于已经过了入门的童鞋可选择略过,都是一些非常实用的函数.如果发现什么问题,欢迎讨论. 问题列表 Q1: 设计一个函数repeatIt(st ...

  4. 5. openCV中常用函数学习

    一.前言 经过两个星期的努力,一边学习,一边写代码,初步完成了毕业论文系统的界面和一些基本功能,主要包括:1 数据的读写和显示,及相关的基本操作(放大.缩小和移动):2 样本数据的选择:3 数据归一化 ...

  5. javascript中常用函数汇总

    js中函数很多,在实际项目开发中,函数的应用可以很大程度上简化我们的代码,所以在此记下开发中js中常用的函数,增强记忆. 1.isNaN(X):函数用于检查其参数是否是非数字值. 如果 x 是特殊的非 ...

  6. SqlServer存储过程中常用函数及操作

    1.case语句 用于选择语句 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN ...

  7. mysql中常用函数简介(不定时更新)

    常用函数version() 显示当前数据库版本database() 返回当前数据库名称user() 返回当前登录用户名inet_aton(IP) 返回IP地址的数值形式,为IP地址的数学计算做准备in ...

  8. SQL中常用函数

    SELECT CONVERT(varchar(100), GETDATE(), 23) AS  日期   结果:2017-01-05     select ISNULL(price,'0.0')   ...

  9. Sql Server中常用函数replicate

    SQL常用函数之三 REPLICATE () 按指定次数重复字符表达式. 语法 REPLICATE ( character_expression, integer_expression) 参数 cha ...

随机推荐

  1. 深入理解Java AIO(二)—— AIO源码解析

    深入理解Java AIO(二)—— AIO源码解析 这篇只是个占位符,占个位置,之后再详细写(这个之后可能是永远) 所以这里只简单说一下我看了个大概的实现原理,具体的等我之后更新(可能不会更新了) 当 ...

  2. c++ 重载、继承、多态

    一.重载 1.函数重载 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或者顺序)必须不同.您不能仅通过返回类型的不同来重载函数. #include & ...

  3. Python学习-第五节:面向对象

    概念: 核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式.若程序一开始是要着手解决一个大的问题,面向 ...

  4. 【tensorflow2.0】AutoGraph的机制原理

    有三种计算图的构建方式:静态计算图,动态计算图,以及Autograph. TensorFlow 2.0主要使用的是动态计算图和Autograph. 动态计算图易于调试,编码效率较高,但执行效率偏低. ...

  5. 「给产品经理讲JVM」:垃圾收集算法

    纠结的我,给我的JVM系列终于起了第三个名字,害,我真是太难了.从 JVM 到 每日五分钟,玩转 JVM 再到现在的给产品经理讲 JVM ,虽然内容为王,但是标题可以让更多的人看到我的文章,所以,历经 ...

  6. Jmeter压力测试笔记(5)问题原因

    压测链路是jmeter=>slb=>nginx => php=>rds 报 Too Many Connections 的原因是前端同时保持了 16000 个连接,达到实例规格的 ...

  7. 如何设置微信小程序顶部标题

    直接在对应的xxx.json中支配如下,就可以了哈 { "backgroundTextStyle": "light", //字体 "navigatio ...

  8. 字典树&&AC自动机---看完大概应该懂了吧。。。。

    目录 字典树 AC自动机 字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计 ...

  9. Python——flask漏洞探究

    python的用途是真的多,就连网站也能做,这个有点像Java的Servlet flask基础 hello world 我们先从基础的开始,在网页上打出hello world,python代码如下: ...

  10. 【Java】【常用类】 Arrays工具类 源码学习

    虽然在数组的随笔中有说过,但实际上应该仔细深入一下源码进行分析 源码没有想象中的高大上,代码终究还是写给人看的,可读性大于执行性 最小阵列排序:1 乘 2的13次方 =  8192 学识浅薄,暂时还不 ...