vc/c++時間函數

來源:互聯網
上載者:User
vc/c++時間函數

 

一、MFC類

MFC提供了兩個日期和 時間類CTime和CTimeSpan,分別代表相對 時間和絕對 時間。CTime是基于格林威治平均 時間(GMT)的,本地的 時間由環境變數TZ決定。CTimeSpan代表了 時間間隔。

CTime類由下列成員函數

CTime()

建立一個CTime對象。

GetCurrentTime()

由當前時間建立一個CTime對象。

GetTime()

由CTime對象返回一個time_t變數。

GetYear()

擷取CTime對象代表的年。

GetMonth()

擷取CTime對象代表的月。

GetDay() 擷取CTime對象代表的日期。

GetHour() 擷取CTime對象代表的小時。

GetMinute()擷取CTime對象代表的分。

GetSecond() 擷取CTime對象代表的秒。

GetDayOfWeek() 擷取CTime對象代表的周日,1代表周日,2代表周-等等。

Format() 將字串轉換成一個基於本地時區的格式字串。

FormatGmt() 將字串轉換成一個基於UTC(世界時)的格式字串。

operator = 賦予新的時間

operator + 增加CTime和CTimeSpan對象。

operator – 減小CTime和CTimeSpan對象。

operator += CTime對象加一個CTimeSpan對象。

operator -= CTime對象減一個CTimeSpan對象。

operator == 比較兩個絕對時間是否相等。

operator != 比較兩個絕對時間是否不相等。

operator < 比較兩個絕對時間,是否前一個大於後一個。

operator > 比較兩個絕對時間,是否前一個小於後一個。

operator >= 比較兩個絕對時間,是否前一個大於等於後一個。

operator <= 比較兩個絕對時間,是否前一個小於等於後一個 二、總結 首先看幾個函數的原型的聲明(在time.h中):

      clock_t clock( void )      clock_t是用來儲存時間的資料類型,是long型

      double difftime(time_t time1, time_t time0);   取時間間隔的函數

      time_t time(time_t * timer);   日曆時間函數

      char * asctime(const struct tm * timeptr);   將tm 類的時間結構轉化為 固定時間格式

      char * ctime(const time_t *timer); 將日曆時間轉化為 固定時間格式

      time_t mktime(struct tm * timeptr);   以年、月、日、時、分、秒等分量儲存的時間結構

      struct tm * gmtime(const time_t *timer);   將日曆時間轉化為格林尼治時間
                                        
      struct tm * localtime(const time_t * timer); 將日曆時間轉化為當地時間

      tm 的定義:
                 struct tm {
         int tm_sec;      /* 秒 – 取值區間為[0,59] */
         int tm_min;      /* 分 - 取值區間為[0,59] */
         int tm_hour;     /* 時 - 取值區間為[0,23] */
         int tm_mday;     /* 一個月中的日期 - 取值區間為[1,31] */
         int tm_mon;      /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
         int tm_year;     /* 年份,其值等於實際年份減去1900 */
         int tm_wday;     /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推  

                         */
         int tm_yday;     /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,

                        1代表1月2日,以此類推 */
         int tm_isdst;    /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候

                       ,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/}

   1.擷取間隔時間
         1.   clock_t start, finish;
             long     i = 10000000;
             double   duration;
             start = clock();
             while( i-- ) ;
             finish = clock();
             duration = (double)(finish - start) / CLOCKS_PER_SEC;
             cout<<duration;
             輸出的是: i從10000000減到零用的時間,精確到毫秒
          2.
             double pause1;
             time_t start,end;
             start = time(NULL);
             system("pause");
             end = time(NULL);
             pause1 =difftime(end,start);
             cout<<pause1;
             輸出的是: 你停頓(pause)的時間,精確到秒
  
   2.獲得日曆時間
             time_t lt;
             lt =time(NULL);//(還不清楚帶參的和不帶參的區別)
             cout<<lt;
             輸出的是: 從1970年1月1日0時0分0秒到此時的秒數
  
  
   3.獲得日期和時間

         1. 將日曆時間轉化為本地時間(格林尼治時間)
           struct tm *local
           time_t t;
           t=time(NULL);
           local=localtime(&t);
           //local=gmtime(&t);
           cout<<local->tm_hour;
         2. 以固定的時間格式獲得日期和時間:看清這兩個函數的參和傳回值的類型
                                       char * asctime(const struct tm * timeptr);
                                       char * ctime(const time_t *timer);

               1.將日曆時間直接轉換為 固定的時間格式的日期和時間

                   char * jieguo;
                   time_t lt;
                   lt =time(NULL);
                   jieguo =ctime(&lt);
                   cout<< jieguo;

               2.將日曆時間經過localtime()和gmtime()轉換後在轉換為固定的時間格式的日期和時間
                   struct tm *local;
                   char * jieguo;
                   time_t t;
                   t =time(NULL);
                   local=localtime(&t);
                   //local=gmtime(&t);
                   jieguo=asctime(local);
                   cout<< jieguo;

4.分解時間轉化為日曆時間

這裡說的分解時間就是以年、月、日、時、分、秒等分量儲存的時間結構,在C/C++中是tm結構。我們可

以使用mktime()函數將用tm結構表示的時間轉化為日曆時間。其函數原型如下:

time_t mktime(struct tm * timeptr);

其傳回值就是轉化後的日曆時間。這樣我們就可以先制定一個分解時間,然後對這個時間進行操作了,

下面的例子可以計算出1997年7月1日是星期幾:

#include "time.h"
#include "stdio.h"
#include "stdlib.h"
int main(void)
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
printf(ctime(&t_of_day));
return 0;
}

運行結果:

Tue Jul 01 00:00:01 1997

現在注意了,有了mktime()函數,是不是我們可以操作現在之前的任何時間呢?你可以通過這種辦法算

出1945年8月15號是星期幾嗎?答案是否定的。因為這個時間在1970年1月1日之前,所以在大多數編譯器

中,這樣的程式雖然可以編譯通過,但運行時會異常終止。
  
   5.還知道了一個system()函數,是執行DOS命令的,system("某DOS命令");標頭檔是stdlib.h?windows.h

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.