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