先说一下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. if-else、switch、while、for

    文章主要会涉及如下几个问题: if-else 和 switch-case 两者相比谁的效率会高些?在日常开发中该如何抉择? 如何基于赫夫曼树结构减少 if-else 分支判断次数? 如何巧妙的应用 d ...

  2. [Asp.Net Core] 关于 Blazor Server Side 的一些杂项, 感想

    在2016年, 本人就开始了一个内部项目, 其特点就是用C#构建DOM树, 然后把DOM同步到浏览器中显示. 并且在一些小工程中使用. 3年下来, 效果很不错, 但因为是使用C#来构建控件树, 在没有 ...

  3. FastDFTJava客户端使用

    1.1.java客户端 余庆先生提供了一个Java客户端,但是作为一个C程序员,写的java代码可想而知.而且已经很久不维护了. 这里推荐一个开源的FastDFS客户端,支持最新的SpringBoot ...

  4. Android的安装

    基于VMware的Android虚拟机搭建 目录 基于VMware的Android虚拟机搭建 下载 安装 配置 使用 下载 进入VMware中国下载VMware Workstation Pro 进入f ...

  5. linux 之虚拟机的安装与介绍

    linux 零基础入门1.1linux介绍 操作系统用途: 管理硬件 驱动硬件 管理软件 分配资源1.2 linux的发展unix -> windows ->linuxlinux 免费 开 ...

  6. 分派pie(二分法)

    2.问题描述 我的生日要到了!根据习俗,我需要将一些派分给大家.我有N个不同口味.不同大小的派.有F个朋友会来参加我的派对,每个人会拿到一块派(必须一个派的一块,不能由几个派的小块拼成:可以是一整个派 ...

  7. Java并发基础07. ThreadLocal类以及应用技巧

    在前面的文章(6. 线程范围内共享数据)总结了一下,线程范围内的数据共享问题,即定义一个 Map,将当前线程名称和线程中的数据以键值对的形式存到 Map 中,然后在当前线程中使用数据的时候就可以根据当 ...

  8. SQL Server中STATISTICS IO物理读和逻辑读的误区

    SQL Server中STATISTICS IO物理读和逻辑读的误区 大家知道,SQL Server中可以利用下面命令查看某个语句读写IO的情况 SET STATISTICS IO ON 那么这个命令 ...

  9. 1041 Be Unique (20分)(水)

    Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...

  10. LinkedHashMap 与 HashMap 实现的区别

    阅读前最好对 HashMap 的内部实现方式有一定了解 LinkedHashMap 继承自 HashMap 主要重写了一个节点类 LinkedHashMap.Entry,并维护一个头结点和尾节点 以及 ...