C++怎样获取当前系统时间?

1、调用cmd函数来获取当前时间

这个模块并不是特别的麻烦,因为这种方法是直接使用cmd命令进行获取以及更改系统时间的一种方法,

但是并不建议大家使用,尤其是有杀毒软件的,因为这个程序涉及到系统的一些更改,当然就非常容易被误认为是一种木马病毒,就拿联想的扬天来说,装机自带迈克菲碰到要更改系统的一些程序直接关闭,并不像360杀毒先是列入程序的木马黑名单,但是自己可以强制使其运行,那废话不多说,先来看一下程序:

#include <stdlib.h>
using namespace std;

int main()
{
	system("time");
	return 0;
}

当然,我在这里并不会多讲system的命令,大家有需要的话可以参考一下我的另外一篇博文:C++里的调用cmd命令的方法

那在这里我就先只展示这个程序的运行后的效果:
cmd-time实例1

2、识别系统API来获取当前时间

使用系统内部的API来获取当前时间是我最喜欢用的,它不仅优秀,而且高大上! 咳咳,不好意思,说错了,应该是:它不仅好用,而且精确,更是因为,非常好理解这对于新手小白也是从未有过的福音!

那直接来看程序:

#include <stdio.h>
#include <windows.h>
using namespace std;

int main()
{
	SYSTEMTIME sys;
	GetLocalTime(&sys);
	printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek);
	return 0;
}

这里我觉得有必要将一下,此处的sys.wYear是表示年的数字,sys.wDayOfWeek是表示一周里面的星期几,以此类推,每个英文单词的前面都加上一个小写的“w“就是这个函数的命令的调用

那我们再来看一张图片:
API获取时间实例1

当然,细心的小伙伴会发现,printf里面有些空格和”/“这些东西大家都可以修改,因为这个是控制输出的样式的,并不影响程序最后的结果,就比如下面的这张图:

API获取时间实例2

最后再多一句嘴:通过API命令获取到的时间是可以直接作为变量储存的,也就是说,可以直接可以用作判断变量

就例如前不久刚刚完工的一个程序,我就是用的API命令来获取的时间,并定义成int类型的变量,最后在实现判断的功能~~

3、直接获取系统时间

直接获取法是比较难理解的一种方法,但是一旦会用它,那就叫一个畅通无阻但是这种方法到底有多难理解呢?

打个比喻:有一棵100米的树,每天白天,你能上升2厘米,晚上,你要掉1厘米,也就是说,整整一天只能够上升1厘米,但是现在树的净高是100米,计算一下需要多少天,再想象一下自己如果真的在那种情况下的话,恐怕天数,不仅仅是一个数字那么简单

那对于爱挑战的小伙伴来说,这无疑是个大好的机会,那我们就来看一看代码吧!

#include<iostream>  
#include<time.h>  
using namespace std;  
  
int main()  
{  
 
	//获取系统时间  
	time_t now_time=time(NULL);  
	//获取本地时间  
	tm*  t_tm = localtime(&now_time);  
	//转换为年月日星期时分秒结果,如图:  
	printf("local time is    : %s\n", asctime(t_tm));  
	//将时间转换为秒  
	time_t mk_time = mktime(t_tm);  
	
	//也可以自己定义一个时间  
	//定义截止时间  
	struct tm deadline_tm;  
	deadline_tm.tm_sec=0;//[0~59]  
	deadline_tm.tm_min=10;//[0~59]  
	deadline_tm.tm_hour=13;//[0~23]  
	deadline_tm.tm_isdst=0;//default  
	deadline_tm.tm_mday=31;//[1~31]  
	deadline_tm.tm_mon=2;//[0~11]  
}

很多的小伙伴包括我看到这么多的代码和注释,脑壳痛,快用万通筋骨贴! Emm。。。(突然感觉这像是植入的广告)但是千万别抠脑壳,我们一起来解读一下这个代码:

首先是头文件:

#include<iostream>  
#include<time.h>  

这个应该不用过多的去解说,就是普普通通的两个头文件

其次是获取两种时间:

  • 1、获取系统时间
  • 2、获取本地时间
//获取系统时间  
time_t now_time=time(NULL);  
//获取本地时间  
tm*  t_tm = localtime(&now_time);

那获取这两种时间有什么用呢,其实在这里我尝试过只获取一种时间来获取当前时间,但是我的电脑上运行好似不行,但是大家也可以尝试一下,比如说注释一段,等等,但是这里想提醒大家的是:两种时间都是有关联性的,也就是说,没有这个时间,那么下一个时间就执行不了运算的功能

//转换为年月日星期时分秒结果,如图:  
printf("local time is    : %s\n", asctime(t_tm));  
//将时间转换为秒  
time_t mk_time = mktime(t_tm);  

这一段就只是一个运算与转换的模块,后面方便输出的时候的可视化,不然。。。(大家可以试试没有转换与运算的模块是什么东东,我是看不懂~)

最后,来说一下最后的一个模块:

//定义截止时间  
struct tm deadline_tm;  
deadline_tm.tm_sec=0;//[0~59]  
deadline_tm.tm_min=10;//[0~59]  
deadline_tm.tm_hour=13;//[0~23]  
deadline_tm.tm_isdst=0;//default  
deadline_tm.tm_mday=31;//[1~31]  
deadline_tm.tm_mon=2;//[0~11]  

这个大家不用深入了解,只不过是一个告诉编译器这个时间是60进制的而已啦!突然感觉电脑是一个”聪明的傻子“

好了,以上就是今天的内容,之后我还会继续更新我的博客,欢迎大家关注我的博客,查看更多的文章!也欢迎大家在CSDN社区里面发布自己的一些发现和经验!拜拜!

发布了5 篇原创文章 · 获赞 6 · 访问量 110

猜你喜欢

转载自blog.csdn.net/dxfjdvsijdfhiv/article/details/104891989