最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++時間函數(shù)整理詳解

 更新時間:2022年10月28日 17:07:34   作者:香蕉有毒  
C++中并沒有針對時間特意提供特定的時間類型,而是直接繼承了C語言的結構以及函數(shù),因此在C++中使用時間函數(shù)需要引用<ctime>頭文件,這篇文章主要介紹了C++時間函數(shù)

一、 時間概念

格林威治時間GMT(Greenwich Mean Time)

格林威治皇家天文臺為了海上霸權的擴張計劃,在十七世紀就開始進行天體觀測。為了天文觀測,選擇了穿過英國倫敦格林威治天文臺子午儀中心的一條經(jīng)線作為零度參考線,這條線,簡稱格林威治子午線。

1884年10月召開了一個國際子午線會議,該會議將格林威治子午線設定為本初子午線,并將格林威治平時 (GMT, Greenwich Mean Time) 作為世界時間標準(UT, Universal Time)。由此也確定了全球24小時自然時區(qū)的劃分,所有時區(qū)都以和 GMT 之間的偏移量做為參考。

1972年之前,格林威治時間(GMT)一直是世界時間的標準。1972年之后,GMT 不再是一個時間標準了。

XP系統(tǒng)中,默認時間格式是GMT。

目前UTC與GMT 相差為0.9秒,故二者可以基本視為一致。

原子時間

1967年,人們利用銫原子振蕩周期極為規(guī)律的特性,研制出了高精度的原子時鐘,將銫原子能級躍遷輻射9192631770周所經(jīng)歷的時間定為1s?,F(xiàn)在用的時間就是1971年10月定義的國際原子時,是通過世界上大約200多臺原子鐘進行對比后,再由國際度量衡局時間所進行數(shù)據(jù)處理,得出的統(tǒng)一的原子時,簡稱TAI。

世界協(xié)調(diào)時

又稱世界統(tǒng)一時間、世界標準時間。UTC是現(xiàn)在全球通用的時間標準,全球各地都同意將各自的時間進行同步協(xié)調(diào)。UTC 時間是經(jīng)過平均太陽時(以格林威治時間GMT為準)、地軸運動修正后的新時標以及以秒為單位的國際原子時所綜合精算而成。

UTC 構成:

原子時間(TAI):

結合了全球400個所有的原子鐘而得到的時間,它決定了我們每個人的鐘表中,時間流動的速度。

世界時間(UT, Universal Time):

也稱天文時間,或太陽時,他的依據(jù)是地球的自轉(zhuǎn),我們用它來確定多少原子時,對應于一個地球日的時間長度。

格式: YYYY-MM-DDThh:mm:ssZ

協(xié)調(diào)世界時不與任何地區(qū)位置相關,也不代表此刻某地的時間,所以在說明某地時間時要加上時區(qū)。也就是說GMT并不等于UTC,而是等于UTC+0,只是格林尼治剛好在0時區(qū)上。GMT = UTC+0。

本地時間

在日常生活中所使用的時間我們通常稱之為本地時間。這個時間等于我們所在(或者所使用)時區(qū)內(nèi)的當?shù)貢r間,它由與世界標準時間(UTC)之間的偏移量來定義。這個偏移量可以表示為 UTC- 或 UTC+,后面接上偏移的小時和分鐘數(shù)。

GMT是前世界標準時,UTC是現(xiàn)世界標準時。

UTC 比 GMT更精準,以原子時計時,適應現(xiàn)代社會的精確計時。

但在不需要精確到秒的情況下,二者可以視為等同。

每年格林尼治天文臺會發(fā)調(diào)時信息,基于UTC。

二、Linux-c時間的存儲方式

1. time_t

一個整型,存儲從1970-1-1 00:00:00年到現(xiàn)在UTC+0經(jīng)過了多少秒,進一步的,struct timeval可精確到微秒。

2. struct tm

用一個結構來分別存儲年月日時分秒。

	struct tm
	{
	    int tm_sec;  /*秒,正常范圍0-59, 但允許至61*/
	    int tm_min;  /*分鐘,0-59*/
	    int tm_hour; /*小時, 0-23*/
	    int tm_mday; /*日,即一個月中的第幾天,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é)約時間的旗標*/
	};
特別注意,年份是從1900年起至今多少年,而不是直接存儲如2022年。月份從0開始的,0表示一月,星期也是從0開始的, 0表示星期日,1表示星期一。

三、 常用函數(shù)

#include <time.h>

#include <sys/time.h>

time_t time(time_t* t);

取得從1970-1-1 00:00:00至今(UTC+0)的秒數(shù),注意并不是至本地時間的秒數(shù)。該時間戳為GMT時間,即時區(qū)為0。

time()總是返回的是當前格林威治時間,不論系統(tǒng)/程序采用的哪個時區(qū)。所以使用time_t時候,讓time_t上的存儲值總是描述格林威治時間。

    time_t tm = time(nullptr);//取得從1970-1-1 00:00:00至今(UTC+0)的秒數(shù)
    //或
    time(&tm0);

struct tm* gmtime(const time_t* timep);

將time_t表示的時間戳轉(zhuǎn)換為沒有經(jīng)過時區(qū)轉(zhuǎn)換的UTC時間,是一個struct tm結構指針。

    struct tm *tmStamp = nullptr;
    time_t tmSec = time(nullptr); 
    tmStamp = gmtime(&tmSec);   //返回沒有經(jīng)過時區(qū)轉(zhuǎn)換的UTC時間 struct tm結構

struct tm* localtime(const time_t* timep);

將time_t表示的時間戳轉(zhuǎn)換換成經(jīng)過時區(qū)轉(zhuǎn)換的時間。使用time_t格林威治時間+時區(qū)偏差,生成tm結構

    struct tm *tmStamp = nullptr;
    time_t tmSec;
    time(&tmSec); //取得從1970年1月1日至今的秒數(shù)
    tmStamp = localtime(&tmSec); //返回經(jīng)過時區(qū)轉(zhuǎn)換的時間,***注意本函數(shù)可能會修改時間秒的值***

time_t mktime(struct tm* timeptr);

將struct tm 結構的時間轉(zhuǎn)換為從1970-1-1年至今的秒數(shù)。

mktime考慮了時區(qū),輸入的值總是要求【localtime-tm】結構-當前時區(qū)時間,輸出值格林威治時間;

char asctime(const struct tm timeptr);

將struct tm結構中的信息轉(zhuǎn)換為真實世界的時間(不經(jīng)過時區(qū)轉(zhuǎn)換的UTC時間),以字符串的形式顯示。

    time_t timeSec;
    time(&timeSec); /*獲取time_t類型的當前時間*/
    /*用gmtime將time_t類型的時間轉(zhuǎn)換為struct tm類型的時間,按沒有經(jīng)過時區(qū)轉(zhuǎn)換的UTC時間
      然后再用asctime轉(zhuǎn)換為我們常見的格式 ,形式:Mon Oct 24 11:41:17 2022
    */
    printf("%s", asctime(gmtime(&timeSec))); //沒有經(jīng)過時區(qū)轉(zhuǎn)換的UTC時間

char ctime(const time_t timep);

將 time_t時間秒表示的時間轉(zhuǎn)換為真實世界的時間(經(jīng)時區(qū)轉(zhuǎn)換的UTC時間),以字符串顯示。

ctime考慮了時區(qū),輸入值要求time_t是格林威治時間,輸出來的值總是用來描述當?shù)貢r間。

// 形式:Mon Oct 24 11:41:17 2022
``
## 7. gettimeofday(&tmval,&zone); // for linux 
返回當前距離1970年的秒數(shù)和微妙數(shù),后面的tz是時區(qū),一般不用傳NULL。
```c
	struct timezone zone;
    struct timeval tmval;
    gettimeofday(&tmval,&zone); // for linux

double difftime(time_t time1, time_t time2);

返回兩個時間秒相差的秒數(shù)。

ctime返回的是靜態(tài)變量地址;更要注意gmtime與localtime返回的靜態(tài)變量地址是同一個,后調(diào)用的會覆蓋上次調(diào)用的值;

tm結構存儲值有時用來描述格林威治時間gmtime,有時用來描述當?shù)貢r間localtime-當前時區(qū)時間。

四、 時間格式化

size_t strftime(char *str, size_t count, const char *format, const struct tm *tm)

函數(shù)原型
#include <time.h>
size_t strftime(char *str, size_t count, const char *format, const struct tm *tm);
參數(shù)說明
  str, 表示返回的時間字符串
  count, 要寫入的字節(jié)的最大數(shù)量
  format, 格式字符串由零個或多個轉(zhuǎn)換符和普通字符(除%)
  tm, 輸入時間
返回值
  如果包含終止的空字符在內(nèi)的結果字符的總數(shù)不大于count,則函數(shù)strftime返回字符數(shù),這些字符被放到s指向的數(shù)組中但不包含終止的空字符。否則,函數(shù)返回零,且數(shù)組的內(nèi)容不確定。

一個常規(guī)用法

	char* format = "%Y-%m-%d %H:%M:%S";
    char strTime[100];
    strftime(strTime, sizeof(strTime), format, tmTime);//2022-10-07 20:46:01

五、計時器-時間段

#include <time.h>
#include <iostream>
using namespace std;
clock_t start = clock();
// do something...
clock_t end   = clock();
cout << "花費了" << (double)(end - start) / CLOCKS_PER_SEC << "秒" << endl;

可精確到毫秒

六、chrono

C++ 11 標準庫引入了chrono庫。利用該庫可以做時間運算和換算。

一個性能統(tǒng)計用法

#include <chrono>   
using namespace std;
using namespace chrono;
auto start = system_clock::now();
// do something...
auto end   = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
cout <<  "花費了" 
     << double(duration.count()) * microseconds::period::num / microseconds::period::den 
     << "秒" << endl;
//精確到微妙

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

相關文章

  • C++學習之移動語義與智能指針詳解

    C++學習之移動語義與智能指針詳解

    智能指針和移動語義是迄今為止,最難理解的兩個概念,下面這篇文章主要給大家介紹了關于C++學習之移動語義與智能指針的相關資料,需要的朋友可以參考下
    2021-05-05
  • C++友元函數(shù)與拷貝構造函數(shù)詳解

    C++友元函數(shù)與拷貝構造函數(shù)詳解

    這篇文章主要介紹了C++友元函數(shù)與拷貝構造函數(shù),需要的朋友可以參考下
    2014-07-07
  • C/C++利用libxml2高效輸出XML大文件詳解

    C/C++利用libxml2高效輸出XML大文件詳解

    這篇文章主要給大家介紹了關于C/C++利用libxml2高效輸出XML大文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-11-11
  • C++中字符串與整型及浮點型轉(zhuǎn)換全攻略

    C++中字符串與整型及浮點型轉(zhuǎn)換全攻略

    C++算法刷題等過程中經(jīng)常會遇到字符串與數(shù)字類型的轉(zhuǎn)換,在這其中雖然樸素的算法有不少,但是對于double等類型還是可以說遇到一些麻煩,所以今天就來說說使用C++標準庫中的函數(shù)實現(xiàn)這些功能。感興趣的小伙伴一起參與閱讀吧
    2021-09-09
  • 使用C++描繪心形

    使用C++描繪心形

    本文給大家分享的是一個使用c++繪制心形的代碼,雖然情人節(jié)已經(jīng)過去了,但是只要有心,天天都是情人節(jié)~~哈哈,讓那些說程序猿都是木頭的人去死吧。
    2015-03-03
  • C語言利用棧實現(xiàn)對后綴表達式的求解

    C語言利用棧實現(xiàn)對后綴表達式的求解

    這篇文章主要為大家詳細介紹了C語言利用棧實現(xiàn)對后綴表達式的求解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • QT實現(xiàn)TCP客戶端自動連接

    QT實現(xiàn)TCP客戶端自動連接

    這篇文章主要為大家詳細介紹了QT中一個TCP客戶端自動連接的測試模型,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-12-12
  • 如何C++使用模板特化功能

    如何C++使用模板特化功能

    這篇文章主要介紹了如何C++使用模板特化功能,通過定義模板,使得函數(shù)或者類不依賴于特定的類型,這樣大幅提升了代碼的復用性。更多詳細內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • C語言中棧的兩種實現(xiàn)方法

    C語言中棧的兩種實現(xiàn)方法

    棧的實現(xiàn)方式有兩種,一種方法是使用指針,而另一種方法則是使用數(shù)組,這篇文章主要介紹了C語言中棧的兩種實現(xiàn)方法,需要的朋友可以參考下
    2021-08-08
  • 帶你了解C++的IO流

    帶你了解C++的IO流

    這篇文章主要介紹了C++ IO流的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09

最新評論

平罗县| 梅河口市| 花莲市| 英山县| 肃北| 泸溪县| 阿勒泰市| 东海县| 伊金霍洛旗| 阜阳市| 临城县| 绥棱县| 西充县| 舒兰市| 五家渠市| 米脂县| 潍坊市| 海盐县| 梁平县| 砚山县| 兰考县| 玉树县| 舞阳县| 柞水县| 广宗县| 庆城县| 双辽市| 礼泉县| 伊宁市| 兴业县| 宜昌市| 梁平县| 洮南市| 凤庆县| 驻马店市| 称多县| 湖州市| 双城市| 金湖县| 济源市| 田林县|