日期和時(shí)間

2018-08-12 22:03 更新

日期和時(shí)間

C++ 標(biāo)準(zhǔn)庫(kù)沒(méi)有提供一個(gè)合適的日期類(lèi)型。C++ 從 C 中繼承了針對(duì)日期和時(shí)間的結(jié)構(gòu)和功能,為了訪問(wèn)與日期和時(shí)間相關(guān)的功能和結(jié)構(gòu),需要在 C++ 程序中包括 <ctime> 頭文件。

這里有四個(gè)與時(shí)間相關(guān)的類(lèi)型:clock_t、time_t、size_ttm。clock_t,size_t 和 time_t 類(lèi)型能夠以某種類(lèi)型的整數(shù)表示系統(tǒng)時(shí)間和日期。

結(jié)構(gòu)類(lèi)型 tm 以 C 結(jié)構(gòu)體的形式支持日期和時(shí)間,有以下元素:

    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++ 中處理日期和時(shí)間時(shí)使用的一些重要的函數(shù)。所有這些函數(shù)都是標(biāo)準(zhǔn) C 和 C++ 庫(kù)的一部分,你可以使用下面給出的 C++ 標(biāo)準(zhǔn)庫(kù)引用查看它們的使用細(xì)節(jié)。

序號(hào) 功能與目的
1 time_t time(time_t *time);這將返回當(dāng)前系統(tǒng)的日歷時(shí)間,以自 1970 年 1 月 1 日開(kāi)始系統(tǒng)運(yùn)行秒數(shù)的形式。如果系統(tǒng)沒(méi)有時(shí)間,返回 1。
2 char *ctime(const time_t *time);這返回一個(gè)指向字符串的指針,字符串形式為 day month year hours:minutes:seconds year\n\0。
3 struct tm *localtime(const time_t *time);這將返回一個(gè)指向 tm 結(jié)構(gòu)體的指針,tm 結(jié)構(gòu)體代表當(dāng)?shù)貢r(shí)間。
4 clock_t clock(void);這將返回一個(gè)與被調(diào)用程序運(yùn)行時(shí)間的總和接近的值。如果時(shí)間無(wú)效,返回 1。
5 char * asctime ( const struct tm * time );這將返回一個(gè)指向字符串的指針,該字符串包含的信息以如下結(jié)構(gòu)體存儲(chǔ),結(jié)構(gòu)體形式如下:day month year hours:minutes:seconds year\n\0
6 struct tm *gmtime(const time_t *time);它返回一個(gè)指向時(shí)間的指針,該時(shí)間是 tm 結(jié)構(gòu)的。時(shí)間用協(xié)調(diào)世界時(shí)(UTC)表示,在本質(zhì)上是格林威治標(biāo)準(zhǔn)時(shí)間(GMT)。
7 time_t mktime(struct tm *time);返回日歷時(shí)間,時(shí)間以參數(shù)中指出的結(jié)構(gòu)形式表示。
8 double difftime ( time_t time2, time_t time1 );這個(gè)函數(shù)計(jì)算秒 time1 和 time2 之間的差異。
9 size_t strftime();這個(gè)函數(shù)可以用于以一種特定格式來(lái)格式化日期和時(shí)間。

當(dāng)前的日期和時(shí)間

考慮你想要取得當(dāng)前系統(tǒng)的日期和時(shí)間,作為當(dāng)?shù)貢r(shí)間或作為一個(gè)協(xié)調(diào)世界時(shí)(UTC)。下面是一個(gè)實(shí)現(xiàn)相同目的的示例:

    #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;
    }

編譯和執(zhí)行上面的代碼,執(zhí)行結(jié)果如下:

    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

使用結(jié)構(gòu)體 tm 格式化時(shí)間:

無(wú)論是在 C 還是在 C++ 中,tm 結(jié)構(gòu)體在處理日期和時(shí)間時(shí)都是非常重要的。如前所述,該結(jié)構(gòu)以一種 C 語(yǔ)言結(jié)構(gòu)體的形式支持日期和時(shí)間。大部分與時(shí)間相關(guān)的函數(shù)使用 tm 結(jié)構(gòu)。下面是一個(gè)例子,它使用了各種各樣日期和時(shí)間的相關(guān)函數(shù)和 tm 結(jié)構(gòu):

在本章中使用結(jié)構(gòu)體,基于一個(gè)假設(shè):你已經(jīng)對(duì) C 語(yǔ)言的結(jié)構(gòu)體有了基本的了解,并且知道如何使用箭頭操作符:-> 訪問(wèn)結(jié)構(gòu)體成員。

    #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;
    }

編譯和執(zhí)行上面的代碼,執(zhí)行結(jié)果如下:

    Number of sec since January 1, 1970:1294548238
    Year: 2011
    Month: 1
    Day: 8
    Time: 22: 44:59
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)