c++ 中常用函數


  先說一下c++標准庫並沒有提供所謂的日期類型,而是繼承了c的日期類型

<cmath>里面有些常用的函數,比如計時函數clock()、獲取系統時間的函數time(),下面就具體的介紹一下

1. clock()

    c++中對clock()的定義為:clock_t clock(void);可以看出,clock為無參函數,返回clock_t型數據;它用於計算從程序啟動到調用該函數所占用

    cpu的時間,若時間不可取,返回-1;默認計算時間為毫秒(ms)。下面說一下具體用法,先上代碼

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    clock_t start1=clock();  //計時開始
    for(int i=0;i<100000000;)
    {
        ++i;
    }
    clock_t end1=clock();  //計時結束
    clock_t start2=clock();  //計時開始
    for(int i=0;i<200000000;i++)
    {
        ++i;
    }
    clock_t end2=clock();  //計時結束
    cout<<"第一個for循環運行時間:"<<end1-start1<<"ms\n";
    cout<<"第二個for循環運行時間:"<<end2-start2<<"ms\n";
    cout<<"整個程序運行時間:"<<clock()<<"ms\n";
    return 0;
}

結果如下圖

第二個for循環運行時間基本上是第一個的2倍,整個程序的運行時間基本就是兩個for循環執行時間的總和。另外,現在輸的出的時間是毫秒,也可以

讓輸出的時間是秒s,這里就要介紹一下CLOCKS_PER_SEC了。CLOCKS_PER_SEC是定義在頭文件"time.h"中的一個常量,表示一秒鍾有多少個

時鍾計時單元,若要輸出時間為秒,就要用到這個常量。用法為:(double)  clock()/CLOCKS_PER_SEC;只需要改一下上面的程序就行了,代碼如下:

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    clock_t start1=clock();  //計時開始
    for(int i=0;i<100000000;)
    {
        ++i;
    }
    clock_t end1=clock();  //計時結束
    clock_t start2=clock();  //計時開始
    for(int i=0;i<200000000;i++)
    {
        ++i;
    }
    clock_t end2=clock();  //計時結束
    cout<<"第一個for循環運行時間:"<<(double)(end1-start1)/CLOCKS_PER_SEC<<"s\n";
    cout<<"第二個for循環運行時間:"<<(double)(end2-start2)/CLOCKS_PER_SEC<<"s\n";
    cout<<"整個程序運行時間:"<<(double)clock()/CLOCKS_PER_SEC<<"s\n";
    return 0;
}

運行結果如下:

可以看到,輸出的時間變成了秒。

 

2. 下面再說一下如何獲取系統日期和時間

   先介紹幾個函數,這些函數在"time.h"頭文件中的定義直接給了出來,方便理解。介紹這些函數之前先說一個概念——協調世界時,又叫世界標准時間,簡寫為UTC;

   世界標准時間也就是常說的格林尼治時間。世界標准時間比中國區時間慢8小時(或者說晚8小時),二者總是相差8;如果UTC時間為:2020/04/23   8:00,那么中國

   區時間為:2020/04/23   16:00。

   (1) time_t time(time_t *time);函數time()返回time_t型數據;參數為time_t型指針,一般設置成空指針NULL或0;函數返回系統當前的日歷時間,自

        1970年1月1日以來所經歷的秒數,這里要特別強調一下是所經歷的秒數撒;若系統沒有時間則返回1。

   (2) char* ctime(const time_t *time);返回一個表示當地時間(中國區時間)的字符串指針,通過這個指針可以以字符串的形式輸出時間。

   (3) struct tm* localtime(const time_t *time);把日歷時間轉化為本地時間;返回一個指向表示當地時間(即中國區時間)的tm結構體,tm結構體保存了這個本地時間,tm

        在"time.h"頭文件中有定義,可以用tm來聲明一個指向此類型結構體的指針,下面來具體說一下tm結構體類型。tm結構體類型把日期和時間以c結構體的形式封裝了

        起來,里面包含了年、月、日、時、分、秒等。具體如下:

       struct tm

       {

           int tm_sec;    //秒,[0,59]

           int tm_min;//分鍾,[0,59]

           int tm_hour;//小時,[0,23]

           int tm_year;//年,用的時候要加1900

           int tm_mon;//月,用的時候加1,因為范圍是[0,11] 

           int tm_mday;  //日,[0,31]

           int tm_wday;//表示星期幾,[0,6]

           int tm_isdst; //沒用過,也沒查過

       }

   (4) struct tm* gmtime(const time_t *time); 這個函數和第(3)個函數有點類似,只不過它是把日歷時間轉化為世界標准時間,其他的基本和第(3)個函數一樣。

   (5) size_t strftime();有四個參數,該函數可用於格式化日期和時間為指定格式來輸出。

   另外說一下,clock_t、time_t、size_t、tm這四個類型能把系統時間和日期表示為某種整數。下面是具體用法,還是上代碼

#include<iostream>
#include<ctime>
using namespace std;
int main()
{
    time_t t=time(0);   //返回自1970/01/01以來所經歷的秒數
    char *pt=ctime(&t);
    tm *dt=localtime(&t);
    cout<<"所經歷的秒數:"<<t<<"\n";
    cout<<pt;   //以字符串的形式輸出當地時間,格式為系統默認的
    cout<<"本地時間:    ";
    cout<<dt->tm_year<<"/"<<dt->tm_mon<<"/"<<dt->tm_mday<<"  星期"<<dt->tm_wday<<"  "; //輸出結構體中的日期和時間
    cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
    dt=gmtime(&t);
    cout<<"世界標准時間:";
    cout<<dt->tm_year<<"/"<<dt->tm_mon<<"/"<<dt->tm_mday<<"  星期"<<dt->tm_wday<<"  "; //輸出結構體中的日期和時間
    cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
    return 0;
}

運行結果如下:

注意看本地時間與UTC的年和月是否和你電腦上的時間一樣,還有本地時間和UTC是否相差8。既然本地時間的年和月與電腦上的時間不一樣,那咋回事呢 ?

前面我說過年和月在使用的時候要分別加1900、1。 就是這個:  int tm_year;//年,用的時候要加1900;int tm_mon;//月,用的時候加1,因為范圍是[0,11] 

所以只要把上面的程序改一下就好了,改好的程序如下

 1 #include<iostream>
 2 #include<ctime>
 3 using namespace std;
 4 int main()
 5 {
 6     time_t t=time(0);   //返回自1970/01/01以來所經歷的秒數
 7     char *pt=ctime(&t);
 8     tm *dt=localtime(&t);
 9     cout<<"所經歷的秒數:"<<t<<"\n";
10     cout<<pt;   //以字符串的形式輸出當地時間,格式為系統默認的
11     cout<<"本地時間:    ";
12     cout<<dt->tm_year+1900<<"/"<<dt->tm_mon+1<<"/"<<dt->tm_mday<<"  星期"<<dt->tm_wday<<"  "; //輸出結構體中的日期和時間
13     cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
14     dt=gmtime(&t);
15     cout<<"世界標准時間:";
16     cout<<dt->tm_year+1900<<"/"<<dt->tm_mon+1<<"/"<<dt->tm_mday<<"  星期"<<dt->tm_wday<<"  "; //輸出結構體中的日期和時間
17     cout<<dt->tm_hour<<":"<<dt->tm_min<<":"<<dt->tm_sec<<"\n";
18     return 0;
19 }

可以看出,在之前的程序的第12行和16行改了一下,加上了1900和1。運行結果如下:

現在就沒有錯誤了

另外本文寫的可能不夠詳細,可以看一下這個,寫的比較詳細:https://www.cnblogs.com/zhengfa-af/p/8312915.html

寫這篇文章我花了一下午的時間,最后還發生了一個插曲,就是在寫到最后的時候,電腦卡住了,顯示無響應,頁面一直無法操作,等了一會還是不行,沒辦法只能重啟,

md心態爆炸,一下午白搞了,真的要被氣死,不過晚上還是給搞完了,我感覺以后得用蘋果的電腦了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM