C++獲取本地時間常見方法匯總
1.跨平臺方法
1.1方法一:手動暴力法
#include <iostream> using namespace std; #include <time.h> time_t t = time(NULL); struct tm* stime=localtime(&t); char tmp[32]={NULL}; sprintf(tmp, "%04d-%02d-%02d %02d:%02d:%02d",1900+stime->tm_year,1+stime->tm_mon,stime->tm_mday, stime->tm_hour,stime->tm_min,stime->tm_sec); cout<<tmp<<endl;
輸出結(jié)果:
2015-04-02 23:12:56
1.2方法二:投機取巧法
#include <iostream> using namespace std; #include <time.h> time_t t = time(0); char tmp[32]={NULL}; strftime(tmp, sizeof(tmp), "%Y-%m-%d %H:%M:%S",localtime(&t)); cout<<tmp<<endl;
輸出結(jié)果:
2015-04-02 23:12:56
1.3方法三:簡獲日歷時間法
#include <iostream> using namespace std; #include <time.h> #include <string> time_t tm; time(&tm); char tmp[128]={NULL}; strcpy(tmp,ctime(&tm)); //或者 //struct tm* stime=localtime(&tm); //strcpy(tmp,asctime(stime)); cout<<tmp<<endl;
輸出結(jié)果:
Fri Aug 14 23:19:42 2015
2.Windows平臺獲取時間
#include <iostream> using namespace std; #include <time.h> #include <windows.h> SYSTEMTIME sys; GetLocalTime(&sys); char tmp[64]={NULL}; sprintf(tmp,"%4d-%02d-%02d %02d:%02d:%02d ms:%03d",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds); cout<<tmp<<endl;
輸出結(jié)果:
2015-08-14 23:41:56 ms:354
3.Unix平臺獲取時間
#include <sys/time.h> #include <unistd.h> struct timeval now_time; gettimeofday(&now_time, NULL); time_t tt = now_time.tv_sec; tm *temp = localtime(&tt); char time_str[32]={NULL}; sprintf(time_str,"%04d-%02d-%02d%02d:%02d:%02d",temp->tm_year+ 1900,temp->tm_mon+1,temp->tm_mday,temp->tm_hour,temp->tm_min, temp->tm_sec); cout<<tmp<<endl;
輸出時間:
2015-08-14 23:41:56
4.需知知識點
(1)UTC (Coordinated Universal Time):協(xié)調(diào)世界時,又稱世界標準時間。曾由格林威治平均時間(Greenwich Mean Time,GMT)提供,現(xiàn)在由原子鐘提供。比如,中國內(nèi)地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。
(2)Calendar Time:日歷時間,是用“從一個標準時間點到此時的時間經(jīng)過的秒數(shù)”來表示的時間,由time()函數(shù)獲取。這個標準時間點對不同的編譯器來說會有所不同,但對一個編譯系統(tǒng)來說,這個標準時間點是不變的,該編譯系統(tǒng)中的時間對應的日歷時間都通過該標準時間點來衡量,所以可以說日歷時間是“相對時間”,但是無論你在哪一個時區(qū),在同一時刻對同一個標準時間點來說,日歷時間都是一樣的。
(3)Epoch指的是一個特定的時間點:1970-01-01 00:00:00 UTC,即Unix 時間戳。
(4)clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數(shù)),一個時鐘計時單元的時間長短是由CPU控制的。一個clock tick不是CPU的一個時鐘周期,而是C/C++的一個基本計時單位。
在VC++的time.h文件中,我們可以找到相關的定義:
#ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED #endif #define CLOCKS_PER_SEC ((clock_t)1000) clock_t clock( void );
這個函數(shù)返回從“開啟這個程序進程”到“程序中調(diào)用clock()函數(shù)”時之間的CPU時鐘計
時單元(clock tick)數(shù),在MSDN中稱之為掛鐘時間(wal-clock)。
//獲取逝去時間 clock_t start, finish; start=clock(); … finish=clock(); //逝去多少秒 long duration=(finish- start)/ CLOCKS_PER_SEC;
(5) time.h還提供了兩種不同的函數(shù)將日歷時間(一個用time_t表示的整數(shù))轉(zhuǎn)換為我們平時看到的年月日時分秒分開顯示的時間格式tm:
struct tm * gmtime(const time_t *timer); struct tm * localtime(const time_t * timer);
其中g(shù)mtime()函數(shù)是將日歷時間轉(zhuǎn)化為世界標準時間(即格林尼治時間),并返回一個tm結(jié)構(gòu)體來保存這個時間,而localtime()函數(shù)是將日歷時間轉(zhuǎn)化為本地時間。比如現(xiàn)在用gmtime()函數(shù)獲得的世界標準時間是2005年7月30日7點18分20秒,那么我用localtime()函數(shù)在中國地區(qū)獲得的本地時間會比世界標準時間晚8個小時。
(6)分解時間就是以年、月、日、時、分、秒等分量保存的時間結(jié)構(gòu),在C/C++中是tm結(jié)構(gòu)。我們可以使用mktime()函數(shù)將用tm結(jié)構(gòu)表示的時間轉(zhuǎn)化為日歷時間。其函數(shù)原型如下:
time_t mktime(struct tm * timeptr);
該函數(shù)與gmtime和localtime函數(shù)具有相反的作用。
以上就是C++獲取本地時間常見方法匯總的詳細內(nèi)容,更多關于C++ 獲取本地時間的資料請關注腳本之家其它相關文章!
相關文章
C++ Custom Control控件向父窗體發(fā)送對應的消息
這篇文章主要介紹了C++ Custom Control控件向父窗體發(fā)送對應的消息的相關資料,需要的朋友可以參考下2015-06-06C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)
這篇文章主要介紹了C++一個函數(shù)如何調(diào)用其他.cpp文件中的函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02C++實現(xiàn)折半插入排序(BinaryInsertSort)
這篇文章主要為大家詳細介紹了C++實現(xiàn)折半插入排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-04-04輸出1000以內(nèi)的素數(shù)的算法(實例代碼)
本篇文章是對輸出1000以內(nèi)的素數(shù)的算法進行了詳細的分析介紹,需要的朋友參考下2013-05-05vector,map,list,queue的區(qū)別詳細解析
如果我們需要隨機訪問一個容器則vector要比list好得多。如果我們已知要存儲元素的個數(shù)則vector 又是一個比list好的選擇。如果我們需要的不只是在容器兩端插入和刪除元素則list顯然要比vector好2013-09-09