程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++獲取本地時間常見方法

C/C++獲取本地時間常見方法

編輯:關於C++

跨平台方法

方法一:手動暴力法

#include 
using namespace std;
#include 

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<

輸出結果:2015-04-02 23:12:56

方法二:投機取巧法

#include 
using namespace std;
#include 

    time_t t = time(0); 
    char tmp[32]={NULL};
    strftime(tmp, sizeof(tmp), %Y-%m-%d %H:%M:%S,localtime(&t)); 
    cout<

輸出結果:2015-04-02 23:12:56

方法三:簡獲日歷時間法

#include 
using namespace std;
#include 
#include 

time_t tm;
time(&tm);
char tmp[128]={NULL};
strcpy(tmp,ctime(&tm));
//或者
//struct  tm* stime=localtime(&tm);
//strcpy(tmp,asctime(stime));
cout<

輸出結果:Fri Aug 14 23:19:42 2015

Windows平台獲取時間

#include 
using namespace std;
#include 
#include 

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<

輸出結果:2015-08-14 23:41:56 ms:354

Unix平台獲取時間

#include  
#include 

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<

輸出時間:2015-08-14 23:41:56

需知知識點

(1)UTC (Coordinated Universal Time):協調世界時,又稱世界標准時間。曾由格林威治平均時間(Greenwich Mean Time,GMT)提供,現在由原子鐘提供。比如,中國內地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。

(2)Calendar Time:日歷時間,是用“從一個標准時間點到此時的時間經過的秒數”來表示的時間,由time()函數獲取。這個標准時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標准時間點是不變的,該編譯系統中的時間對應的日歷時間都通過該標准時間點來衡量,所以可以說日歷時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標准時間點來說,日歷時間都是一樣的。

(3)Epoch指的是一個特定的時間點:1970-01-01 00:00:00 UTC,即Unix 時間戳。

(4)clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),一個時鐘計時單元的時間長短是由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 );

這個函數返回從“開啟這個程序進程”到“程序中調用clock()函數”時之間的CPU時鐘計
時單元(clock tick)數,在MSDN中稱之為掛鐘時間(wal-clock)。

//獲取逝去時間
    clock_t start, finish;
    start=clock();
    …
    finish=clock();
//逝去多少秒
    long duration=(finish- start)/ CLOCKS_PER_SEC ;

(5) time.h還提供了兩種不同的函數將日歷時間(一個用time_t表示的整數)轉換為我們平時看到的把年月日時分秒分開顯示的時間格式tm:

struct tm * gmtime(const time_t *timer);                                          
struct tm * localtime(const time_t * timer);

其中gmtime()函數是將日歷時間轉化為世界標准時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將日歷時間轉化為本地時間。比如現在用gmtime()函數獲得的世界標准時間是2005年7月30日7點18分20秒,那麼我用localtime()函數在中國地區獲得的本地時間會比世界標准時間晚8個小時。

(6)分解時間就是以年、月、日、時、分、秒等分量保存的時間結構,在C/C++中是tm結構。我們可以使用mktime()函數將用tm結構表示的時間轉化為日歷時間。其函數原型如下:
time_t mktime(struct tm * timeptr);
該函數與gmtime和localtime函數具有相反的作用。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved