C++日期和時間
C++標準庫不提供一個適當的日期類型。 C++從C語言繼承的結構和函數日期和時間.要訪問的日期和時間相關的函數和結構,需要在C++程序中引入<ctime>頭文件。
有四個與時間相關的類型:clock_t, time_t, size_t 和 tm。clock_t,size_t 和 time_t 能夠代表係統時間和日期作為某種整數。
結構類型tm保存日期和時間具有以下元素C結構的形式:
struct tm { int tm_sec; // seconds of minutes from 0 to 61 int tm_min; // minutes of hour from 0 to 59 int tm_hour; // hours of day from 0 to 24 int tm_mday; // day of month from 1 to 31 int tm_mon; // month of year from 0 to 11 int tm_year; // year since 1900 int tm_wday; // days since sunday int tm_yday; // days since January 1st int tm_isdst; // hours of daylight savings time }
以下是重要的功能,使用日期和時間在C或C++中工作。所有這些函數都是標準的C和C++庫的一部分,可以使用引用在C++中,如下麵給出標準庫的細節。
SN | 函數及用途 |
---|---|
1 |
time_t time(time_t *time); 這將返回係統經過的秒數當前日曆時間自1月1日,1970年;如果冇有係統時間,則返回0.1 |
2 |
char *ctime(const time_t *time); 這將返回一個指針格式年月日的字符串 hours:minutes:seconds year \0 |
3 |
struct tm *localtime(const time_t *time); 這將返回一個指向代表當地時間的 tm 結構 |
4 |
clock_t clock(void); 這將返回一個值,接近時間的調用程序已經運行的數量。如果時間無法使用返回0.1 |
5 |
char * asctime ( const struct tm * time ); 這將返回一個指向包含存儲在結構的信息指向的時間轉換成形式字符串:天月日 hours:minutes:seconds year \0 |
6 |
struct tm *gmtime(const time_t *time); 這個指針返回到該時刻 tm 結構的形式。時間表示在協調世界時(UTC),它實質上是格林威治時間(GMT) |
7 |
time_t mktime(struct tm *time); 這將返回日曆時間等同的時間結構所指向的時間 |
8 |
double difftime ( time_t time2, time_t time1 ); 此函數計算 time1和time2秒之間的差值 |
9 |
size_t strftime(); 此函數可以用於格式的日期和時間的特定格式 |
當前日期和時間:
考慮要獲取當前係統日期和時間,無論是作為一個本地時間或為協調世界時(UTC)。以下是示例來實現相同的:
#include <iostream> #include <ctime> using namespace std; int main( ) { // current date/time based on current system time_t now = time(0); // convert now to string form char* dt = ctime(&now); cout << "The local date and time is: " << dt << endl; // convert now to tm struct for UTC tm *gmtm = gmtime(&now); dt = asctime(gmtm); cout << "The UTC date and time is:"<< dt << endl; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
The local date and time is: Sat Jan 8 20:07:41 2011 The UTC date and time is:Sun Jan 9 03:07:41 2011
使用格式時間結構tm:
tm結構是非常重要的,同時帶有日期和時間在C或C++中工作。此結構用於保存日期和時間在C語言結構的形式,如上所述。大多數時候,相關的函數是使用tm結構。下麵是一個例子,這使得使用各種日期和時間相關函數和tm結構:
雖然本章中采用的結構,需要了解基本的C結構以及如何使用箭頭訪問結構成員的->運算符。
#include <iostream> #include <ctime> using namespace std; int main( ) { // current date/time based on current system time_t now = time(0); cout << "Number of sec since January 1,1970:" << now << endl; tm *ltm = localtime(&now); // print various components of tm structure. cout << "Year: "<< 1900 + ltm->tm_year << endl; cout << "Month: "<< 1 + ltm->tm_mon<< endl; cout << "Day: "<< ltm->tm_mday << endl; cout << "Time: "<< 1 + ltm->tm_hour << ":"; cout << 1 + ltm->tm_min << ":"; cout << 1 + ltm->tm_sec << endl; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Number of sec since January 1, 1970:1294548238 Year: 2011 Month: 1 Day: 8 Time: 22: 44:59