C++ 日期與時間-ctime


C++ 標准庫沒有提供所謂的日期類型。C++ 繼承了 C 語言用於日期和時間操作的結構和函數。為了使用日期和時間相關的函數和結構,需要在 C++ 程序中引用 <ctime> 頭文件

time.h 頭文件定義了四個變量類型、兩個宏

四個變量類型:

size_t 是無符號整數類型,它是 sizeof 關鍵字的結果。
clock_t 這是一個適合存儲處理器時間的類型,類型為unsigned long
time_t 這是一個適合存儲日歷時間類型。unsigned long類型
struct tm 這是一個用來保存時間和日期的結構

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 到 11(注意)  */
   int tm_year;        /* 自 1900 年起的年數      */
   int tm_wday;        /* 一周中的第幾天,范圍從 0 到 6 */
   int tm_yday;        /* 一年中的第幾天,范圍從 0 到 365   */
   int tm_isdst;       /* 夏令時               */
};

兩個宏:

NULL 這個宏是一個空指針常量的值。
CLOCKS_PER_SEC 這個宏表示每秒的處理器時鍾個數。用於將clock()函數的結果轉化為以秒為單位的量,這個量的具體值是與操作系統相關的,通常為1000

 

#include <iostream>
#include<ctime>
using namespace std;

int main()
{
    clock_t start, finish; //定義兩個處理器時鍾變量
    double total = 0;
    int i = 0;
    start = clock(); //讀取時間 //該函數返回程序執行起(一般為程序的開頭),處理器時鍾所使用的時間。如果時間不可用,則返回 -1
    //為了獲取 CPU 所使用的秒數,您需要除以 CLOCKS_PER_SEC
    //在 32 位系統中,CLOCKS_PER_SEC 等於 1000000,該函數大約每 72 分鍾會返回相同的值

    for (; i < 100000000; ++i)
    {
        //do someting;
    }
    finish = clock();
    total = (double)(finish - start) / CLOCKS_PER_SEC;//將時間轉換為秒 //printf("CPU 占用的總時間:%f\n", total_t);

    cout << total << endl;

    return 0;
}

 

time_t seconds;  //創建日歷時間對象
    seconds = time(NULL);  //返回時間--格式一
  //time(&seconds);
//返回時間--格式二
//當參數為NULL時,得到當前日歷時間(從1970-01-01 00:00:00到現在的秒數)

 

time_t timer;
    timer = time(NULL);
    char stime[30];
    ctime_s(stime, sizeof stime, &timer); //將日歷時間參數timer轉換為字符串 //返回字符串格式:星期,月,日,小時:分:秒,年

    cout << stime << endl;
    system("pause");  //暫停
    //需要#include<stdlib.h>

 

time_t timer;
    time(&timer);
    
    struct tm* Now = new tm(); //創建日期時間結構變量指針
    localtime_s(Now, &timer); //使用timer的值來填充tm結構
    
    cout << Now->tm_hour << endl;
    cout << Now->tm_min << endl;

 

 

time_t timer;
    time(&timer);
    
    struct tm Now; 
    localtime_s(&Now, &timer); 
    char str[32];
    asctime_s(str, &Now);//將結構tm*所表示的時間轉換為字符串 //返回的時間字符串格式為:星期,月,日,小時:分:秒,年
    cout << str << endl;

 

time_t first, second;
    time(&first);
    Sleep(2000);
    time(&second);
    double a = difftime(second, first); //返回兩次time_t的時間差 //單位:秒
    cout << a << endl;

 

time_t timer;
    tm info;
    time(&timer);
    gmtime_s(&info ,&timer); //獲取時間 //得到以結構tm表示的時間信息,並用格林威治標准時間表示
    //格林威治標准時間(Greenwich Mean Time,GMT),中國內地的時間與UTC得時差為+8,也即UTC+8,美國為UTC-5

 

time_t timer,timer1;
    tm info;
    time(&timer);
    gmtime_s(&info ,&timer); 
    
    timer1 = mktime(&info); //把tm*的時間格式轉換為time_t格式的時間

 

#include <iostream>
#include<ctime>
using namespace std;

int main()
{
    time_t timer;
    tm info;
    char buf[80];

    time(&timer);
    localtime_s(&info, &timer);  
    strftime(buf, 80, "%Y年%m月%e日_%H時%M分%S秒", &info);//按照指定的格式輸出為字符串
    //參數1:char*   用來保存字符串
    //參數2:寫到參數1中的最多字節數
    //參數3:格式
    //參數4:tm*
    //以年月日_時分秒的形式表示當前時間
    /*format如下:它們是區分大小寫的。
    %a 星期幾的簡寫
    %A 星期幾的全稱
    %b 月分的簡寫
    %B 月份的全稱
    %c 標准的日期的時間串
    %C 年份的后兩位數字
    %d 十進制表示的每月的第幾天
    %D 月/天/年
    %e 在兩字符域中,十進制表示的每月的第幾天
    %F 年-月-日
    %g 年份的后兩位數字,使用基於周的年
    %G 年分,使用基於周的年
    %h 簡寫的月份名
    %H 24小時制的小時
    %I 12小時制的小時
    %j 十進制表示的每年的第幾天
    %m 十進制表示的月份
    %M 十時制表示的分鍾數
    %n 新行符
    %p 本地的AM或PM的等價顯示
    %r 12小時的時間
    %R 顯示小時和分鍾:hh:mm
    %S 十進制的秒數
    %t 水平制表符
    %T 顯示時分秒:hh:mm:ss
    %u 每周的第幾天,星期一為第一天 (值從0到6,星期一為0)
    %U 第年的第幾周,把星期日做為第一天(值從0到53)
    %V 每年的第幾周,使用基於周的年
    %w 十進制表示的星期幾(值從0到6,星期天為0)
    %W 每年的第幾周,把星期一做為第一天(值從0到53)
    %x 標准的日期串
    %X 標准的時間串
    %y 不帶世紀的十進制年份(值從0到99)
    %Y 帶世紀部分的十進制年份
    %z,%Z 時區名稱,如果不能得到時區名稱則返回空字符。
    %% 百分號
*/
    cout << buf << endl;
    

    return 0;
}

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

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



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