程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 淺談C/C++的time_t函數

淺談C/C++的time_t函數

編輯:C++入門知識

淺談C/C++的time_t函數


 

最近翻到《C專家編程》前言看到time_t函數,竟然一時之間全無概念,只是約莫知道是個有關時間的函數,這對已經學了C/C++的博主來說,簡直是個嘲諷,本機測試了一下,大概是下面這個樣子:

 

#include 
#include 
#include 
#include 
#include 
using namespace std;
/*常用的時間函數: */
///將結構中的信息轉換為真實世界的時間,以字符串的形式顯示
char *asctime(const struct tm* timeptr);

///將timep轉換為真實世界的時間,以字符串的形式顯示,和asctime傳入參數不一樣
char *ctime(const time_t *timep);

///返回兩個時間差的秒數
double difftime(time_t time1, time_t time2);

///返回當前距離1970年的秒數和微妙數,後面的tz是時區,一般不用
int get_time_of_day(struct timeval *tv,struct timezone *tz);

///將time_t表示的時間轉換為沒有經過時區轉換的UTC時間,是一個struct tm結構指針
struct tm* gmtime(const time_t *timep);

///和gmtime類似,但是它是經過時區轉換的時間。
struct tm* localtime(const time_t *timpe);

///將struct tm 結構的時間轉換為從1970年至今的秒數
time_t mktime(struct tm* timeptr);

///取得從1970年1月1日至今的秒數。
time_t time(time_t *t);

int main()
{
    /*運行程序用系統命令date顯示本機時間為: Thu Nov 26 12:53:13 2015*/

    time_t biggest= 0x7fffffff; /// time_t所能表示的最大值
    printf(biggest= %s 
, ctime(&biggest));
    printf(biggest= %s 
, asctime(gmtime(&biggest)));

   /* 輸出:
        biggest= Tue Jan 19 11:14:07 2038
        biggest= Tue Jan 19 03:14:07 2038
    我們發現整整差了8個小時,這是因為ctime()函數把參數轉換為當地時間,跟世界統一時間UTC(格林尼治時間)並不一樣
    取決於所在的時區,參照上面函數說明可以知道:
    gmtime()函數是將time_t表示的時間轉換為沒有經過時區轉換的UTC時間,是一個struct tm結構指針
    */
  /*可以測試一下下面兩個例子*/
    time_t timep;
    time(&timep);  ///獲取time_t類型的當前時間
    printf(%s
, asctime( gmtime(&timep)));
    /// 輸出: Thu Nov 26 04:44:40 2015 ///沒有經過時區轉換的UTC時間

   time_t timep;
   time(&timep);
   printf(%s
, ctime(&timep));
   ///輸出: Thu Nov 26 12:53:13 2015   ///經過時區轉換的UTC時間
    return 0;
}
經過其他測試,我們可以總結:
time,gmtime,asctime 所表示的時間都是UTC時間,只是數據類型不一樣;
而localtime,ctime 所表示的時間都是經過時區轉換後的時間,它和你用系統命令date所表示的CST時間應該保持一致。

 

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