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社區裏面發佈自己的一些發現和經驗!拜拜!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章