婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux系統中時間的獲取和使用

Linux系統中時間的獲取和使用

熱門標簽:北京人工外呼系統廠家 話術外呼系統 燃氣管線地圖標注顏色 寧波400電話辦理對企業的意義 400電話申請要什么條件 廣東如何申請400電話 西柏坡地圖標注 i智能電話機器人yeta 哈爾濱400電話去哪辦理

Linux系統時間有兩種。

(1)日歷時間。該值是自協調世界時(UTC)1970年1月1日00:00:00這個特定時間以來所經過的秒數累計值。基本數據類型用time_t保存。最后通過轉換才能得到我們平時所看到的24小時制或者12小時間制的時間。

(2)進程時間。也被稱為CPU時間,用以度量進程使用的中央處理器資源。進程時間以時鐘滴答計算。

本文將給大家詳細介紹關于Linux時間的獲取和使用,下面話不多說了,來一起看看詳細的介紹吧

獲取時間戳

time()

#include <time.h>
time_t time(time_t *calptr)
  • time返回當前時間的時間戳,也就是從世界時到現在的秒數;
  • time_t實際就是一個uint64_t;
  • calptr不為空時,時間戳也會寫入到該指針中;

調用示例:

#include <time.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
time_t curTime;
curTime = time(NULL);
cout << curTime << endl;
return 0;
}

結果:

返回一串數值,如1533287924

gettimeofday()和clock_gettime()

time函數只能得到秒精度的時間,為了獲得更高精度的時間戳,需要其他函數。gettimeofday函數可以獲得微秒精度的時間戳,用結構體timeval來保存;clock_gettime函數可以獲得納秒精度的時間戳,用結構體timespec來保存。

#include <sys/time.h>

int gettimeofday(struct timeval *tp, void *tzp);
因為歷史原因tzp的唯一合法值是NULL,因此調用時寫入NULL即可。

int clock_gettime(clockid_t clock_id, strcut timespec *tsp);
clock_id有多個選擇,當選擇為CLOCK_REALTIME時與time的功能相似,但是時間精度更高。

兩個函數使用的結構體定義如下:

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

struct timespec
{
time_t tv_sec; //秒
long tv_nsec; //納秒
};

調用示例:

#include <time.h>
#include <sys/time.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
time_t dwCurTime1;
dwCurTime1 = time(NULL);

struct timeval stCurTime2;
gettimeofday(&stCurTime2, NULL);

struct timespec stCurTime3;
clock_gettime(CLOCK_REALTIME, &stCurTime3);

cout << "Time1: " << dwCurTime1 << "s" << endl;
cout << "Time2: " << stCurTime2.tv_sec << "s, " << stCurTime2.tv_usec << "us" << endl;
cout << "Time3: " << stCurTime3.tv_sec << "s, " << stCurTime3.tv_nsec << "ns" << endl;

return 0;
}

結果:

編譯時要在編譯命令最后加上-lrt鏈接Real Time動態庫,如
g++ -o time2 test_time_linux_2.cpp -lrt

Time1: 1533289490s
Time2: 1533289490s, 133547us
Time3: 1533289490s, 133550060ns

可視化時間

tm結構體

得到的時間戳不能直觀的展示現在的時間,為此需要使用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至今已經多少年*/ 1900+ p->tm_year;
int tm_wday; /*星期,一周中的第幾天, 從星期日算起,0-6*/
int tm_yday; /*從今年1月1日到目前的天數,范圍0-365*/
int tm_isdst; /*日光節約時間的旗標*/
};

time_t轉成tm

gmtime 和localtime可以將time_t類型的時間戳轉為tm結構體,用法如下:

struct tm* gmtime(const time_t *timep);
//將time_t表示的時間轉換為沒有經過時區轉換的UTC時間,是一個struct tm結構指針

stuct tm* localtime(const time_t *timep);
//和gmtime功能類似,但是它是經過時區轉換的時間,也就是可以轉化為北京時間。

固定格式打印時間

得到tm結構體后,可以將其轉為字符串格式的日常使用的時間,或者直接從time_t進行轉換,分別可以使用以下兩個函數達到目的。不過這兩個函數只能打印固定格式的時間。

//這兩個函數已經被標記為棄用,盡量使用后面將要介紹的函數
char *asctime(const struct tm* timeptr);
char *ctime(const time_t *timep);

調用示例:

#include <time.h>
#include <sys/time.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
time_t dwCurTime1;
dwCurTime1 = time(NULL);

struct tm* pTime;
pTime = localtime(&dwCurTime1);

char* strTime1;
char* strTime2;
strTime1 = asctime(pTime);
strTime2 = ctime(&dwCurTime1);

cout << strTime1 << endl;
cout << strTime2 << endl;

return 0;
}

結果:

Fri Aug 3 18:24:29 2018
Fri Aug 3 18:24:29 2018

靈活安全的時間轉換函數strftime()

上述兩個函數因為可能出現緩沖區溢出的問題而被標記為棄用,因此更加安全的方法是采用strftime方法。

/*
** @buf:存儲輸出的時間
** @maxsize:緩存區的最大字節長度
** @format:指定輸出時間的格式
** @tmptr:指向結構體tm的指針
*/
size_t strftime(char* buf, size_t maxsize, const char *format, const struct tm *tmptr);

我們可以根據format指向字符串中格式,將timeptr中存儲的時間信息按照format指定的形式輸出到buf中,最多向緩沖區buf中存放maxsize個字符。該函數返回向buf指向的字符串中放置的字符數。

函數strftime()的操作有些類似于sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中。格式化命令說明串 strDest中各種日期和時間信息的確切表示方法。格式串中的其他字符原樣放進串中。格式命令列在下面,它們是區分大小寫的。

%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 時區名稱,如果不能得到時區名稱則返回空字符。
%% 百分號

調用示例:

#include <time.h>
#include <sys/time.h>
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
time_t dwCurTime1;
dwCurTime1 = time(NULL);

struct tm* pTime;
pTime = localtime(&dwCurTime1);

char buf[100];

strftime(buf, 100, "time: %r, %a %b %d, %Y", pTime);

cout << buf << endl;

return 0;
}

結果:

time: 08:18:12 PM, Fri Aug 03, 2018

時間函數之間的關系圖

進程時間

進程時間是進程被創建后使用CPU的時間 ,進程時間被分為以下兩個部分:

  • 用戶CPU時間:在用戶態模式下使用CPU的時間
  • 內核CPU時間:在內核態模式下使用CPU的時間。這是執行內核調用或其他特殊任務所需要的時間。

clock函數

clock函數提供了一個簡單的接口用于取得進程時間,它返回一個值描述進程使用的總的CPU時間(包括用戶時間和內核時間),該函數定義如下:

#include <time.h>
clock_t clock(void)
//if error, return -1

clock函數返回值得計量單位是CLOCKS_PER_SEC,將返回值除以這個計量單位就得到了進程時間的秒數

times函數

times函數也是一個進程時間函數,有更加具體的進程時間表示,函數定義如下:

#include <sys/times.h>
clock_t times(struct tms* buf);

struct tms{
clock_t tms_utime;
clock_t tms_stime;
clock_t tms_cutime;
clock_t tms_cstime;
};

times函數雖然返回類型還是clock_t,但是與clock函數返回值的計量單位不同。times函數的返回值得計量單位要通過sysconf(SC_CLK_TCK)來獲得。

Linux系統編程手冊上一個完整的使用案例如下:

#include <time.h>
#include <sys/times.h>
#include <unistd.h>
#include <stdio.h>

static void displayProcessTime(const char* msg)
{
struct tms t;
clock_t clockTime;
static long clockTick = 0;

if (msg != NULL) 
{
printf("%s\n", msg);
}

if (clockTick == 0)
{
clockTick = sysconf(_SC_CLK_TCK);
if (clockTick < 0) return;
}

clockTime = clock();
printf("clock return %ld CLOCKS_PER_SEC (%.2f seconds)\n", (long)clockTime, (double)clockTime/CLOCKS_PER_SEC);

times(&t);
printf("times return user CPU = %.2f; system CPU = %.2f\n", (double)t.tms_utime / clockTick, (double)t.tms_stime / clockTick);
}

int main()
{
printf("CLOCKS_PER_SEC = %ld, sysconf(_SC_CLK_TCK) = %ld\n", (long)CLOCKS_PER_SEC, sysconf(_SC_CLK_TCK));

displayProcessTime("start:");
for (int i = 0; i < 1000000000; ++i)
{
getpid();
}
printf("\n");
displayProcessTime("end:");

return 0;
}

參考

[1] http://www.runoob.com/w3cnote/cpp-time_t.html

[2] Unix高級環境編程(第三版)

[3] Unix系統編程手冊

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

標簽:湘潭 巴中 西藏 張家口 開封 襄陽 珠海 阜陽

巨人網絡通訊聲明:本文標題《Linux系統中時間的獲取和使用》,本文關鍵詞  Linux,系統,中時,間的,獲取,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux系統中時間的獲取和使用》相關的同類信息!
  • 本頁收集關于Linux系統中時間的獲取和使用的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色婷婷综合视频在线观看| 一二三四区精品视频| 国产传媒一区在线| 日韩av一级电影| 天天色图综合网| 日本v片在线高清不卡在线观看| 一区二区三区在线视频观看58| 亚洲欧美在线观看| 一区二区三区在线观看视频| 中文字幕亚洲精品在线观看| 国产精品免费网站在线观看| 亚洲欧美在线视频观看| 日韩 欧美一区二区三区| 激情久久五月天| 99久久婷婷国产| 欧美日韩精品一区二区在线播放 | 欧美午夜在线观看| 日韩一级视频免费观看在线| 亚洲国产精品精华液2区45| 亚洲欧洲日韩一区二区三区| 亚洲激情综合网| 日韩影院精彩在线| 成人sese在线| 日韩欧美国产一区二区三区| 久久久精品国产免大香伊| 国产精品人人做人人爽人人添| 亚洲精品综合在线| 激情成人午夜视频| 99久久久精品| 欧美日韩一区二区三区在线| 精品久久久久久久一区二区蜜臀| 1024亚洲合集| 久久爱www久久做| 欧美日韩久久久久久| 亚洲在线视频网站| 91精品1区2区| 亚洲男人电影天堂| 日本福利一区二区| 樱花草国产18久久久久| 在线精品视频一区二区| 亚洲另类中文字| 91麻豆成人久久精品二区三区| 精品国产人成亚洲区| 国内精品久久久久影院薰衣草| 欧美图区在线视频| 日韩 欧美一区二区三区| 日韩一卡二卡三卡四卡| 日韩精品一区第一页| 欧美视频一区二区在线观看| 亚洲欧美日韩在线不卡| 国产v综合v亚洲欧| 国产精品美女视频| 国产麻豆精品视频| 亚洲视频一区二区在线| 99这里只有久久精品视频| 一区二区三区在线观看欧美| 欧美日韩精品一二三区| 丰满白嫩尤物一区二区| 亚洲一区在线观看视频| 日韩免费观看高清完整版 | 在线观看日韩一区| 亚洲成人激情自拍| 3d动漫精品啪啪一区二区竹菊| 美腿丝袜亚洲一区| 欧美人动与zoxxxx乱| 国产乱码精品一区二区三区av | 国产乱码字幕精品高清av| 一区二区国产盗摄色噜噜| 日韩精品一区二区三区三区免费| 国产精品一区二区三区乱码| 午夜欧美在线一二页| 亚洲激情校园春色| 国产日产欧美一区二区三区| 337p亚洲精品色噜噜噜| 欧洲激情一区二区| 国产精品影音先锋| 国产乱码精品一品二品| 亚洲成人激情av| 午夜国产精品一区| 亚洲欧美区自拍先锋| 国产精品无码永久免费888| 欧美一区二视频| 欧美日韩免费电影| 91成人免费电影| 在线看国产一区二区| 国产高清精品久久久久| 极品美女销魂一区二区三区 | 国产不卡视频在线观看| 狠狠网亚洲精品| www.色综合.com| 欧美视频在线不卡| 日韩欧美一区在线| 久久久欧美精品sm网站| 亚洲天堂网中文字| 丝袜美腿亚洲一区二区图片| 久久97超碰色| 一本色道久久综合亚洲91| 日韩一级片网址| 国产精品卡一卡二卡三| 亚洲国产综合色| 国产精品一区在线观看你懂的| www.欧美日韩国产在线| 欧美日韩精品高清| 久久久久国产一区二区三区四区| 中文字幕在线不卡| 九九视频精品免费| 欧美三级三级三级| 中文字幕一区在线| 国产做a爰片久久毛片 | 日韩欧美成人一区二区| 亚洲高清久久久| 欧美一a一片一级一片| 国产精品少妇自拍| 久久国产欧美日韩精品| 欧美中文字幕不卡| 亚洲美女视频在线观看| 色综合中文字幕国产| 久久人人爽爽爽人久久久| 美女精品一区二区| 国产情人综合久久777777| 国产精品网站在线| www.在线欧美| 偷拍与自拍一区| 欧美成人精品1314www| 精品中文字幕一区二区| 26uuu亚洲综合色欧美| 大白屁股一区二区视频| 国产精品久久久久久久岛一牛影视 | 美女网站一区二区| 久久久久久久网| 成人精品免费看| 亚洲黄网站在线观看| 日韩三级中文字幕| 成人精品视频一区二区三区| 樱桃国产成人精品视频| 久久这里只有精品首页| gogo大胆日本视频一区| 毛片不卡一区二区| 亚洲精选视频免费看| 精品理论电影在线| 91香蕉视频黄| 美女网站色91| 亚洲一区二区三区四区五区中文| 91精品久久久久久蜜臀| 国产精品资源网| 亚洲一级二级三级在线免费观看| 精品国产123| 欧美色视频在线| 久久99久久99| 亚洲视频在线观看三级| 日韩欧美中文字幕公布| 国产大陆亚洲精品国产| 美女脱光内衣内裤视频久久影院| 亚洲国产电影在线观看| 91麻豆精品国产自产在线观看一区 | 91精品国产福利在线观看| 欧美日韩视频在线一区二区| 国产麻豆午夜三级精品| 日韩国产欧美在线播放| 亚洲精品久久嫩草网站秘色| 国产免费观看久久| www成人在线观看| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 成人激情开心网| 国产精品香蕉一区二区三区| 国产一区二区在线观看视频| 免费观看一级欧美片| 日韩精品欧美精品| 精品一二三四在线| 99视频一区二区| 成人亚洲一区二区一| 久久91精品国产91久久小草| 成人午夜视频网站| 777欧美精品| 最好看的中文字幕久久| 精东粉嫩av免费一区二区三区 | 夜夜精品视频一区二区| 亚洲欧美电影院| 国产精品一区二区黑丝| 精品视频免费在线| 午夜视频在线观看一区二区| 欧美一级一级性生活免费录像| 欧美中文字幕一二三区视频| 一本色道久久加勒比精品| 国产精品视频你懂的| 欧美经典一区二区三区| 久久久精品人体av艺术| 国产性天天综合网| 中文字幕一区二区5566日韩| 亚洲精品大片www| 亚洲综合视频网| 亚洲国产视频一区| 日本美女一区二区三区视频| 日韩在线a电影| 国产精品中文欧美| 色天天综合色天天久久| 欧美无砖专区一中文字| 91精品国产综合久久久久| 精品乱人伦小说| 国产精品久久久久国产精品日日|