<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
C 標準庫提供了 time() 函數與 localtime() 函數可以獲取到當前系統的日曆時間,但 time() 函數精度只能到秒級,如果需要更高精度的系統時間需要使用 gettimeofday() 函數,精度達到微秒級。
#include <sys/time.h> int gettimeofday(struct timeval *tv, struct timezone *tz);
tv 引數是一個 struct timeval 結構體(同樣是在 <sys/time.h> 標頭檔案中定義):
struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ };
時區結構體 struct timezone 的使用已過時,tz 引數通常應指定為 NULL。
函數 localtime() 把 timep 指向的日曆時間轉換為表示本地時間的細分時間。
#include <time.h> struct tm *localtime(const time_t *timep);
localtime() 返回一個指向 struct tm 物件的指標,它儲存了一個日曆時間的各組成部分,日曆時間也被稱為細分時間(Broken-down time)。該結構體定義在 <time.h> 標頭檔案中:
struct tm { int tm_sec; /* Seconds (0-60) */ int tm_min; /* Minutes (0-59) */ int tm_hour; /* Hours (0-23) */ int tm_mday; /* Day of the month (1-31) */ int tm_mon; /* Month (0-11) */ int tm_year; /* Year - 1900 */ int tm_wday; /* Day of the week (0-6, Sunday = 0) */ int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */ int tm_isdst; /* Daylight saving time */ };
tm 結構體的成員:
tm_sec —— 分鐘後的秒數,通常在 59 秒的範圍內,但最多可以達到 60 秒,以允許閏秒。
tm_min —— 小時後的分鐘數,範圍為 0 到 59。
tm_hour —— 午夜過後的小時數,範圍為 0 到 23。
tm_mday —— 一個月的某一天,範圍為 1 到 31。
tm_mon —— 自 1 月以來的月份數,範圍為 0 到 11(顯示月份的時候需要加 1)
tm_year —— 自 1900 年以來的年數(顯示年份的時候需要加上 1900)
tm_wday —— 自週日(星期日)以來的天數,範圍為 0 到 6。
tm_yday —— 自 1 月 1 日以來的天數,範圍為 0 到 365。
tm_isdst —— 指示夏時制在所述時間是否有效的標誌。如果夏令時有效,則該值為正值;如果夏令時無效,則為零;如果資訊不可用,則為負值。
#include <stdio.h> // included for 'printf()' #include <sys/time.h> // included for 'gettimeofday()' #include <time.h> // included for 'localtime()' int main(int argc, char const *argv[]) { struct timeval tv; gettimeofday(&tv, NULL); time_t sec = tv.tv_sec; suseconds_t usec = tv.tv_usec; struct tm *lt = localtime(&sec); printf("%d-%02d-%02d %02d:%02d:%02d.%03dn", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, (int)(usec / 1000)); return 0; }
使用 gettimeofday 獲取到儲存在 timeval 結構體的時間之後,通過 localtime 函數將 tv_sec 轉換成 struct tm 結構體,在關鍵的 tm_year, tm_mon 進行特殊處理計算出當前到秒的日曆時間,然後通過將 tv_usec 微秒數除以 1000 得到毫秒數。
在命令列使用 gcc 編譯:
gcc -o main main.c
結果為帶毫秒數的當前日曆時間:
$ ./main
2022-12-15 11:03:56.847
如果需要直接在程式碼中獲取當前帶毫秒數的日曆時間,可以參考以下封裝介面:
使用 C++11 標準的 thread_local 建立一個執行緒安全的全域性變數,然後將運算結果儲存在全域性變數中,最後返回物件的指標,這樣既能保證呼叫函數的易用性,同時也能兼顧運算效能,這種寫法可以非常簡單地應用到大部分應用中:
thread_local char __timebuf[64] = {0x00}; const char *curtime() { struct timeval tv; gettimeofday(&tv, NULL); struct tm *lt = localtime(&tv.tv_sec); snprintf(__timebuf, sizeof(__timebuf) - 1, "%d-%02d-%02d %02d:%02d:%02d.%03d", lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday, lt->tm_hour, lt->tm_min, lt->tm_sec, (int)(tv.tv_usec / 1000)); return __timebuf; }
到此這篇關於C/C++實現獲取系統時間的範例程式碼的文章就介紹到這了,更多相關C++獲取系統時間內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45