欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++中時(shí)間庫函數(shù)的使用詳解

 更新時(shí)間:2022年11月09日 10:55:53   作者:SakuraMay_Ai  
這篇文章主要為大家詳細(xì)介紹了C/C++中的時(shí)間相關(guān)知識(shí)總結(jié),例如時(shí)間庫函數(shù)的使用以及獲取本地時(shí)間的不同方法,文中的示例代碼講解詳細(xì),需要的可以參考一下

C/C++ 中時(shí)間的概念

Unix 時(shí)間戳(Unix timestamp),或稱 Unix 時(shí)間(Unix time)、POSIX 時(shí)間(POSIX time),是一種時(shí)間表示方式,定義為從格林威治時(shí)間1970年01月01日00時(shí)00分00秒起至現(xiàn)在的總秒數(shù)。time_t 就是用來存儲(chǔ)該數(shù)的一個(gè)類型,它是 unsigned long 類型。使用64位二進(jìn)制數(shù)字表示時(shí)間的系統(tǒng),最多可以使用到格林威治時(shí)間292,277,026,596年12月04日15時(shí)30分08秒。如果想要更精確一點(diǎn),可以用結(jié)構(gòu) struct timeval,它可以精確到微秒:

struct timeval
{
    long tv_sec;    // 秒
    long tv_usec;     // 微秒
};

而直接存儲(chǔ)年月日時(shí)分秒等的是一個(gè)結(jié)構(gòu)體:

struct tm
{
    int tm_sec;        // 秒,正常范圍0-59, 允許至61
    int tm_min;        // 分鐘,0-59
    int tm_hour;    // 小時(shí), 0-23
    int tm_mday;    // 日,一個(gè)月中的第幾天,1-31
    int tm_mon;        // 月,從一月算起,0-11,1 + p->tm_mon;
    int tm_year;    // 年,從1900至今已經(jīng)多少年,1900 + p->tm_year;
    int tm_wday;    // 星期,一周中的第幾天,從星期日算起,0-6
    int tm_yday;    // 從今年1月1日到目前的天數(shù),范圍0-365
    int tm_isdst;    // 日光節(jié)約時(shí)間的旗標(biāo)
};

常用的時(shí)間庫函數(shù)

常用的時(shí)間函數(shù)都包含在頭文件 time.h/ctime(C/C++ 版本)中。

time()

time_t time(time_t *ptr);

該函數(shù)返回得到當(dāng)前日歷時(shí)間或者設(shè)置日歷時(shí)間,日歷時(shí)間即自格林威治時(shí)間(1970-01-01 00:00:00 UTC)起經(jīng)過的時(shí)間,單位為秒。ptr 是一個(gè)指向類型為 time_t 對(duì)象的指針。如果 ptr 不為空,則返回值存儲(chǔ)在變量 ptr 中。一般給 ptr 傳遞0或者 NULL 值,如果傳遞的是非空地址,也能得到當(dāng)前的日歷時(shí)間。

time_t t1 = time(0);
time_t t2 = time(NULL);
// 等價(jià)語句,三個(gè)對(duì)象存儲(chǔ)的都是同一個(gè)數(shù)值
time_t t3;
time(&t3);

asctime()

char *asctime(const struct tm *timeptr);

該函數(shù)接受一個(gè)指向 tm 結(jié)構(gòu)類型常量對(duì)象的指針 timeptr,返回一個(gè)指向字符串的指針,該字符串包含了可讀格式的日期和時(shí)間信息 :

w m d h:m:s y

其中,w 表示星期幾,m 是以字母表示的月份,d 表示一月中的第幾天,h : m : s 表示當(dāng)前的時(shí)間,y 表示年份。asctime 函數(shù)常用于將結(jié)構(gòu)中的信息轉(zhuǎn)換為真實(shí)世界的時(shí)間,以字符串的形式顯示。它計(jì)算得到的是世界統(tǒng)一時(shí)間。世界統(tǒng)一時(shí)間比北京時(shí)間早八個(gè)小時(shí)。比如當(dāng)前北京時(shí)間是 8:41,利用 asctime 顯示的時(shí)間則為 00:41,這意味著日期也有可能會(huì)早一天。

gmtime()

struct tm *gmtime(const time_t *timer);

該函數(shù)接受一個(gè)指向 time_t 類型常量對(duì)象的指針 timer,返回一個(gè)指向 tm 結(jié)構(gòu)類型的指針。它使用 timer 的值來計(jì)算 tm 的各個(gè)成員變量,得到的是協(xié)調(diào)世界時(shí)。

ctime()

char *ctime(const time_t *timeptr);

該函數(shù)接受一個(gè)指向 time_t 類型常量對(duì)象的指針 timeptr,返回一個(gè)指向字符串的指針,其與 asctime() 的返回類型和格式是一樣的。這兩個(gè)函數(shù)的區(qū)別在于傳入的參數(shù)類型不一樣,而且 ctime 返回的是本地時(shí)區(qū)時(shí)間。

localtime()

struct tm *localtime(const time_t *timer);

該函數(shù)接受一個(gè)指向 time_t 類型常量對(duì)象的指針 timer,返回一個(gè)指向 tm 結(jié)構(gòu)類型的指針。它使用 timer 的值來計(jì)算 tm 的各個(gè)成員變量,得到的是“本地時(shí)區(qū)時(shí)間”。

mktime()

time_t mktime(struct tm *timeptr)

該函數(shù)接受一個(gè)指向 tm 結(jié)構(gòu)類型常量對(duì)象的指針 timeptr,返回一個(gè) time_t 類型的無符號(hào)整數(shù)。它的作用是將 timeptr 所指向的結(jié)構(gòu)體變量轉(zhuǎn)換成自格林威治時(shí)間(1970-01-01 00:00:00 UTC)起經(jīng)過的時(shí)間并返回,單位為秒,若發(fā)生錯(cuò)誤返回-1。

strftime()
size_t strftime(
    char *str,
    size_t maxsize,
    const char *format,
    const struct tm *timeptr);

該函數(shù)接受一個(gè)字符串str、一個(gè)無符號(hào)整數(shù) maxsize,一個(gè)字符串 format 以及一個(gè)指向 tm 結(jié)構(gòu)類型常量對(duì)象的指針。它的作用是將 timeptr 表示的時(shí)間按照格式化規(guī)則存儲(chǔ)在 str 中,maxsize 用來表示復(fù)制到 str 中的最大字符個(gè)數(shù)。如果 str 的字符個(gè)數(shù)(包含空字符 ‘\0’)小于 maxsize,則函數(shù)返回其字符個(gè)數(shù),否則返回0。

size_t 是一個(gè)與機(jī)器相關(guān)的無符號(hào)整數(shù)類型,其大小足以保證存儲(chǔ)內(nèi)存中的任意對(duì)象。例如數(shù)組下標(biāo)的類型、vector 下標(biāo)的類型實(shí)際上都是 size_t。

format 是一個(gè) C 字符串,其中包含了普通字符和特殊格式說明符的任何組合。這些格式說明符由 strftime 函數(shù)識(shí)別,從而將 tm 中每個(gè)成員變量(參考前面 tm 結(jié)構(gòu)中定義的各個(gè)整數(shù))替換為相應(yīng)的格式并存入 str 中。下表為格式說明符:

說明符替換為
%a縮寫的星期幾名稱,例如:Sun
%A完整的星期幾名稱,例如:Sunday
%b縮寫的月份名稱,例如:Mar
%B完整的月份名稱,例如:March
%c日期和時(shí)間表示法,例如:Sun Aug 19 02:56:02 2012
%d一月中的第幾天(01-31),例如:19
%F顯示年-月-日,例如:09-11-03
%H24 小時(shí)格式的小時(shí)(00-23),例如:14
%I12 小時(shí)格式的小時(shí)(01-12),例如:05
%j一年中的第幾天(001-366),例如:231
%m十進(jìn)制數(shù)表示的月份(01-12),例如:08
%M十進(jìn)制表示的分鐘數(shù)(00-59),例如:55
%pAM 或 PM 名稱,例如:PM
%r12小時(shí)的時(shí)間,例如:9
%R小時(shí)和分鐘,例如:08:29
%S秒(00-61),例如:02
%U一年中的第幾周,以第一個(gè)星期日作為第一周的第一天(00-53),例如:33
%w十進(jìn)制數(shù)表示的星期幾,星期日表示為 0(0-6),例如:4
%W一年中的第幾周,以第一個(gè)星期一作為第一周的第一天(00-53),例如:34
%x標(biāo)準(zhǔn)日期串,例如:08/19/12
%X標(biāo)準(zhǔn)時(shí)間串,例如:02:50:06
%y年份的最后兩個(gè)數(shù)字(00-99),例如:01
%Y完整的年份,例如:2012
%Z時(shí)區(qū)的名稱或縮寫,若得不到時(shí)區(qū)名稱則返回空串,例如:CDT
%%一個(gè) % 符號(hào),例如:%

difftime()

double difftime(time_t time1, time_t time2)

該函數(shù)接受兩個(gè) time_t 類型的無符號(hào)整數(shù)并返回它們的差值,單位為秒。

C/C++ 獲取當(dāng)前(本地)時(shí)間的方法

方法一

先獲取格林威治時(shí)間,再使用 localtime 函數(shù)獲取當(dāng)前時(shí)間的 tm 結(jié)構(gòu)類型變量,將其格式化后存入 str 再打印:

#include <cstdio>
#include <ctime>

int main(void)
{
    time_t t = time(0);
    char str[64];
    strftime(str, sizeof(str), "%Y/%m/%d %X %A 今年第%j天 %z", localtime(&t));
    printf("當(dāng)前時(shí)間:%s", str);

    return 0;
}

方法二

先獲取格林威治時(shí)間,使用 localtime 函數(shù)獲取當(dāng)前時(shí)間的 tm 結(jié)構(gòu)類型變量,再將其用 ctime 函數(shù)轉(zhuǎn)換成當(dāng)前時(shí)間的字符串打印輸出:

#include <cstdio>
#include <ctime>

int main(void)
{
    time_t t = time(0);
    struct tm *info = localtime(&t);

    printf("當(dāng)前時(shí)間:%s", ctime(info));

    return 0;
}

方法三

先獲取格林威治時(shí)間,使用 localtime 函數(shù)獲取當(dāng)前時(shí)間的 tm 結(jié)構(gòu)類型變量,然后直接依據(jù) tm 中的成員來計(jì)算我們想要打印的內(nèi)容:

#include <cstdio>
#include <ctime>

int main()
{
    char wday[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
    time_t t = time(0);     // 獲得time_t結(jié)構(gòu)的時(shí)間,世界協(xié)調(diào)時(shí)
    struct tm *p;

    p = localtime(&t);      // 轉(zhuǎn)換為 struct tm 結(jié)構(gòu)的本地時(shí)間
    printf("%04d/%02d/%02d ", 1900 + p->tm_year, 1+ p->tm_mon, p->tm_mday);               // 打印當(dāng)前日期
    printf("%s %02d:%02d:%02d\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);    // 打印當(dāng)前時(shí)間

    return 0;
}

方法四

使用 windows 的 API,能夠精確到毫秒級(jí)。但是因?yàn)橛玫氖?windows 下的函數(shù),所以換了其他操作系統(tǒng)就不一定能用了:

#include <cstdio>
#include <windows.h>

int main()
{
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    printf("%4d-%02d-%02d %02d:%02d:%02d.%03d 星期%1d",
           sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);

    return 0;
}

方法五

利用系統(tǒng)函數(shù),只顯示當(dāng)前的時(shí)間,不顯示年月日這些。而且還能直接修改系統(tǒng)時(shí)間:

#include <cstdlib>

int main()
{
    system("time");

    return 0;
}

到此這篇關(guān)于C/C++中時(shí)間庫函數(shù)的使用詳解的文章就介紹到這了,更多相關(guān)C/C++時(shí)間庫函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何在C/C++中測(cè)量一個(gè)函數(shù)或功能的運(yùn)行時(shí)間

    詳解如何在C/C++中測(cè)量一個(gè)函數(shù)或功能的運(yùn)行時(shí)間

    本文算是一個(gè)比較完整的關(guān)于在 C/C++ 中測(cè)量一個(gè)函數(shù)或者功能的總結(jié),最后會(huì)演示三種方法的對(duì)比,文章通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Qt實(shí)現(xiàn)文本編輯器(一)

    Qt實(shí)現(xiàn)文本編輯器(一)

    在Qt中QMainWindow是一個(gè)為用戶提供主窗口程序的類,包含了:菜單欄、工具欄、錨接部件、狀態(tài)欄以及一個(gè)中部件。本文將利用QMainWindow制作一個(gè)文本編輯器,感興趣的可以試一試
    2022-01-01
  • C語言實(shí)現(xiàn)磁盤映射

    C語言實(shí)現(xiàn)磁盤映射

    磁盤映射技術(shù)通過將文件映射到內(nèi)存中,提高了文件操作的效率,本文就來介紹一下C語言實(shí)現(xiàn)磁盤映射,感興趣的可以了解一下
    2024-09-09
  • VS?Code安裝及C、C++環(huán)境配置詳細(xì)教程(Windows系統(tǒng))

    VS?Code安裝及C、C++環(huán)境配置詳細(xì)教程(Windows系統(tǒng))

    這篇文章主要介紹了VS?Code安裝及C、C++環(huán)境配置詳細(xì)教程(Windows系統(tǒng)),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • C++實(shí)現(xiàn)單張圖片讀取和保存

    C++實(shí)現(xiàn)單張圖片讀取和保存

    這篇文章主要為大家詳細(xì)介紹了C++語言讀取和保存單張圖片的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Qt中布局管理的使用小結(jié)

    Qt中布局管理的使用小結(jié)

    Qt的布局管理系統(tǒng)提供了簡(jiǎn)單而強(qiáng)大的機(jī)制,確保它們有效地使用空間,本文就介紹了Qt中布局管理的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • C++ 實(shí)現(xiàn)優(yōu)先隊(duì)列的簡(jiǎn)單實(shí)例

    C++ 實(shí)現(xiàn)優(yōu)先隊(duì)列的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)優(yōu)先隊(duì)列的簡(jiǎn)單實(shí)例的相關(guān)資料,希望通過本文能幫助大家實(shí)現(xiàn)優(yōu)先隊(duì)列,需要的朋友可以參考下
    2017-08-08
  • 分享面試官常用16個(gè)c/c++面試題

    分享面試官常用16個(gè)c/c++面試題

    這篇文章主要分享的是面試官常用的16個(gè)c/c++面試題,?C中static有什么作用、C++中const有什么用?C與C++各自是如何定義常量的?有什么不同?等等問題,具有一定的參考資料,需要的小伙伴可以參考一下
    2022-01-01
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計(jì)算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個(gè)完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • C語言通過二分查找實(shí)現(xiàn)猜數(shù)字游戲

    C語言通過二分查找實(shí)現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了在C語言中如何通過二分查找思想編寫一個(gè)簡(jiǎn)單的猜數(shù)字游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-02-02

最新評(píng)論