C++怎样获取当前系统时间?
1、调用cmd函数来获取当前时间
这个模块并不是特别的麻烦,因为这种方法是直接使用cmd命令进行获取以及更改系统时间的一种方法,
但是并不建议大家使用,尤其是有杀毒软件的,因为这个程序涉及到系统的一些更改,当然就非常容易被误认为是一种木马病毒,就拿联想的扬天来说,装机自带
迈克菲
碰到要更改系统的一些程序直接关闭,并不像
360杀毒
先是列入程序的木马黑名单,但是自己可以强制使其运行,那废话不多说,先来看一下程序:
#include <stdlib.h>
using namespace std;
int main()
{
system("time");
return 0;
}
当然,我在这里并不会多讲system的命令,大家有需要的话可以参考一下我的另外一篇博文:
C++里的调用cmd命令的方法
那在这里我就先只展示这个程序的运行后的效果:
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“就是这个函数的命令的调用
那我们再来看一张图片:
当然,细心的小伙伴会发现,
printf里面有些空格和”/“这些东西大家都可以修改,因为这个是控制输出的样式的,并不影响程序最后的结果
,就比如下面的这张图:
最后再多一句嘴:
通过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社区里面发布自己的一些发现和经验!拜拜!