1. 程式人生 > >C/C++中的日期和時間time_t詳細解釋

C/C++中的日期和時間time_t詳細解釋

摘要:
本文從介紹基礎概念入手,探討了在C/C++中對日期和時間操作所用到的資料結構和函式,並對計時、時間的獲取、時間的計算和顯示格式等方面進行了闡述。本文還通過大量的例項向你展示了time.h標頭檔案中宣告的各種函式和資料結構的詳細使用方法。更多學習資料盡在這裡!
關鍵字:UTC(世界標準時間),Calendar Time(日曆時間),epoch(時間點),clock tick(時鐘計時單元)
1.概念
在C/C++中,對字串的操作有很多值得注意的問題,同樣,C/C++對時間的操作也有許多值得大家注意的地方。最近,在技術群中有很多網友也多次問到過C++語言中對時間的操作、獲取和顯示等等的問題。下面,在這篇文章中,筆者將主要介紹在C/C++中時間和日期的使用方法.
通過學習許多C/C++庫,你可以有很多操作、使用時間的方法。但在這之前你需要了解一些“時間”和“日期”的概念,主要有以下幾個:
Coordinated Universal Time(UTC):協調世界時,又稱為世界標準時間,也就是大家所熟知的格林威治標準時間(Greenwich Mean Time,GMT)。比如,中國內地的時間與UTC的時差為+8,也就是UTC+8。美國是UTC-5。
Calendar Time:日曆時間,是用“從一個標準時間點到此時的時間經過的秒數”來表示的時間。這個標準時間點對不同的編譯器來說會有所不同,但對一個編譯系統來說,這個標準時間點是不變的,該編譯系統中的時間對應的日曆時間都通過該標準時間點來衡量,所以可以說日曆時間是“相對時間”,但是無論你在哪一個時區,在同一時刻對同一個標準時間點來說,日曆時間都是一樣的。
epoch:時間點。時間點在標準C/C++中是一個整數,它用此時的時間和標準時間點相差的秒數(即日曆時間)來表示。
clock tick:時鐘計時單元(而不把它叫做時鐘滴答次數),一個時鐘計時單元的時間長短是由CPU控制的。一個clock tick不是CPU的一個時鐘週期,而是C/C++的一個基本計時單位。
我們可以使用ANSI標準庫中的time.h標頭檔案。這個標頭檔案中定義的時間和日期所使用的方法,無論是在結構定義,還是命名,都具有明顯的C語言風格。下面,我將說明在C/C++中怎樣使用日期的時間功能。
2. 計時
C/C++中的計時函式是clock(),而與其相關的資料型別是clock_t。在MSDN中,查得對clock函式定義如下:
clock_t clock( void );
這個函式返回從“開啟這個程式程序”到“程式中呼叫clock()函式”時之間的CPU時鐘計時單元(clock tick)數,在MSDN中稱之為掛鐘時間(wall-clock)。其中clock_t是用來儲存時間的資料型別,在time.h檔案中,我們可以找到對它的定義:
#ifndef _CLOCK_T_DEFINED
typedef long clock_t;
#define _CLOCK_T_DEFINED
#endif
很明顯,clock_t是一個長整形數。在time.h檔案中,還定義了一個常量CLOCKS_PER_SEC,它用來表示一秒鐘會有多少個時鐘計時單元,其定義如下:
#define CLOCKS_PER_SEC ((clock_t)1000)
可以看到可以看到每過千分之一秒(1毫秒),呼叫clock()函式返回的值就加1。下面舉個例子,你可以使用公式clock()/CLOCKS_PER_SEC來計算一個程序自身的執行時間:
void elapsed_time()
{
 printf("Elapsed time:%u secs.\n",clock()/CLOCKS_PER_SEC);
}
當然,你也可以用clock函式來計算你的機器執行一個迴圈或者處理其它事件到底花了多少時間:
#include “stdio.h”
#include “stdlib.h”
#include “time.h”