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

Linux下用C獲取當(dāng)前時(shí)間

 更新時(shí)間:2017年01月24日 09:17:42   作者:Boblim  
本篇文章主要介紹了Linux獲取當(dāng)前時(shí)間的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

Linux下用C獲取當(dāng)前時(shí)間,具體如下:

代碼(可以把clock_gettime換成time(NULL))

void getNowTime()
{
 timespec time;
 clock_gettime(CLOCK_REALTIME, &time); //獲取相對(duì)于1970到現(xiàn)在的秒數(shù)
 tm nowTime;
 localtime_r(&time.tv_sec, &nowtime);
 char current[1024];
 sprintf(current, "%04d%02d%02d%02d:%02d:%02d", nowTime.tm_year + 1900, nowTime.tm_mon, nowTime.tm_mday, 
  nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec);
}

分析:

clock_gettime()

 函數(shù)"clock_gettime"是基于Linux C語(yǔ)言的時(shí)間函數(shù),他可以用于計(jì)算精度和納秒。

語(yǔ)法:

#include<time.h>

int clock_gettime(clockid_t clk_id,struct timespec *tp);

參數(shù):

clk_id : 檢索和設(shè)置的clk_id指定的時(shí)鐘時(shí)間。

CLOCK_REALTIME:系統(tǒng)實(shí)時(shí)時(shí)間,隨系統(tǒng)實(shí)時(shí)時(shí)間改變而改變,即從UTC1970-1-1 0:0:0開始計(jì)時(shí),中間時(shí)刻如果系統(tǒng)時(shí)間被用戶改成其他,則對(duì)應(yīng)的時(shí)間相應(yīng)改變

  •   CLOCK_MONOTONIC:從系統(tǒng)啟動(dòng)這一刻起開始計(jì)時(shí),不受系統(tǒng)時(shí)間被用戶改變的影響
  •   CLOCK_PROCESS_CPUTIME_ID:本進(jìn)程到當(dāng)前代碼系統(tǒng)CPU花費(fèi)的時(shí)間
  •   CLOCK_THREAD_CPUTIME_ID:本線程到當(dāng)前代碼系統(tǒng)CPU花費(fèi)的時(shí)間
struct timespec

{

time_t tv_sec; /* 秒*/

long tv_nsec; /* 納秒*/

};

localtime()

localtime是 把從1970-1-1零點(diǎn)零分到當(dāng)前時(shí)間系統(tǒng)所偏移的秒數(shù)時(shí)間轉(zhuǎn)換為本地時(shí)間.

語(yǔ)法

說(shuō)明:此函數(shù)獲得的tm結(jié)構(gòu)體的時(shí)間是日歷時(shí)間。

用 法: struct tm *localtime(const time_t *clock);

返回值:返回指向tm 結(jié)構(gòu)體的指針.tm結(jié)構(gòu)體是time.h中定義的用于分別存儲(chǔ)時(shí)間的各個(gè)量(年月日等)的結(jié)構(gòu)體.

例1:

#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
 time_t timer;//time_t就是long int 類型
 struct tm *tblock;
 timer = time(NULL);
 tblock = localtime(&timer);
 printf("Local time is: %s\n", asctime(tblock));
 return 0;
}

執(zhí)行結(jié)果:

Local time is: Mon Feb 16 11:29:26 2009

例2:

上面的例子用了asctime函數(shù),下面這個(gè)例子不使用這個(gè)函數(shù)一樣能獲取系統(tǒng)當(dāng)前時(shí)間。需要注意的是年份加上1900,月份加上1。

#include<time.h>
#include<stdio.h>
int main()
{
 struct tm *t;
 time_t tt;
 time(&tt);
 t = localtime(&tt);
 printf("%4d年%02d月%02d日 %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
 return 0;
}

localtime()與localtime_r()的區(qū)別

localtime():

#include <cstdlib> 
#include <iostream> 
#include <time.h> 
#include <stdio.h> 
 
using namespace std; 
 
int main(int argc, char *argv[]) 
{ 
 time_t tNow =time(NULL); 
 time_t tEnd = tNow + 1800; 
 //注意下面兩行的區(qū)別 
 struct tm* ptm = localtime(&tNow); 
 struct tm* ptmEnd = localtime(&tEnd); 
 
 char szTmp[50] = {0}; 
 strftime(szTmp,50,"%H:%M:%S",ptm); 
 char szEnd[50] = {0}; 
 strftime(szEnd,50,"%H:%M:%S",ptmEnd); 
  
 
 printf("%s /n",szTmp); 
 printf("%s /n",szEnd); 
  
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
}

最后出來(lái)的結(jié)果是:

21:18:39

21:18:39

和最初想法不一致。

查閱localtime的文檔,發(fā)現(xiàn)這段話:

This structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.

也就是說(shuō)每次只能同時(shí)使用localtime()函數(shù)一次,要不就會(huì)被重寫!

The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.

因此localtime()不是可重入的。同時(shí)libc里提供了一個(gè)可重入版的函數(shù)localtime_r();

Unlike localtime(), the reentrant version is not required to set tzname。

修改程序:(localtime_r())

#include <cstdlib> 
#include <iostream> 
#include <time.h> 
#include <stdio.h> 
 
using namespace std; 
 
int main(int argc, char *argv[]) 
{ 
 time_t tNow =time(NULL); 
 time_t tEnd = tNow + 1800; 
 
 //在這里修改程序 
 //struct tm* ptm = localtime(&tNow); 
 //struct tm* ptmEnd = localtime(&tEnd); 
 struct tm ptm = { 0 }; 
 struct tm ptmEnd = { 0 }; 
 localtime_r(&tNow, &ptm); 
 localtime_r(&tEnd, &ptmEnd); 
  
 char szTmp[50] = {0}; 
 strftime(szTmp,50,"%H:%M:%S",&ptm); 
 char szEnd[50] = {0}; 
 strftime(szEnd,50,"%H:%M:%S",&ptmEnd); 
 printf("%s /n",szTmp); 
 printf("%s /n",szEnd); 
  
 
 system("PAUSE"); 
 return EXIT_SUCCESS; 
}

最后出來(lái)的結(jié)果是:

10:29:06
10:59:06

tm

 struct tm {
     int tm_sec;  /* 秒 – 取值區(qū)間為[0,59] */ 
     int tm_min;  /* 分 - 取值區(qū)間為[0,59] */ 
     int tm_hour;  /* 時(shí) - 取值區(qū)間為[0,23] */ 
     int tm_mday;  /* 一個(gè)月中的日期 - 取值區(qū)間為[1,31] */ 
     int tm_mon;  /* 月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11] */ 
     int tm_year;  /* 年份,其值等于實(shí)際年份減去1900 */ 
     int tm_wday; /* 星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一 */ 
     int tm_yday; /* 從每年1月1日開始的天數(shù)– 取值區(qū)間[0,365],其中0代表1月1日 */ 
     int tm_isdst; /* 夏令時(shí)標(biāo)識(shí)符,夏令時(shí)tm_isdst為正;不實(shí)行夏令時(shí)tm_isdst為0 */ 
   };

time 函數(shù)

返回:1970-1-1, 00:00:00以來(lái)經(jīng)過(guò)的秒數(shù)

原型: time_t time(time_t *calptr) 

結(jié)果可以通過(guò)返回值,也可以通過(guò)參數(shù)得到,見實(shí)例

頭文件 <time.h>

返回值: 

成功:秒數(shù),從1970-1-1,00:00:00 可以當(dāng)成整型輸出或用于其它函數(shù)

失?。?1

例:

 time_t now;
 time(&now);// 等同于now = time(NULL)
 printf("now time is %d\n", now);

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 什么是Linux軟鏈接和Linux硬鏈接

    什么是Linux軟鏈接和Linux硬鏈接

    這篇文章主要為大家詳細(xì)介紹了什么是Linux軟鏈接和Linux硬鏈接,在默認(rèn)情況下,ln命令產(chǎn)生硬鏈接,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Apache2.4.2編譯安裝2個(gè)常見錯(cuò)誤和解決方法

    Apache2.4.2編譯安裝2個(gè)常見錯(cuò)誤和解決方法

    這篇文章主要介紹了Apache2.4.2編譯安裝2個(gè)常見錯(cuò)誤和解決方法,需要的朋友可以參考下
    2014-06-06
  • Apache 認(rèn)證總結(jié)

    Apache 認(rèn)證總結(jié)

    經(jīng)常上網(wǎng)的讀者會(huì)遇到這種情況:訪問一些網(wǎng)站的某些資源時(shí),瀏覽器彈出一個(gè)對(duì)話框,要求輸入用戶名和密碼來(lái)獲取對(duì)資源的訪問。
    2009-05-05
  • CentOS 7中 Apache Web 服務(wù)器安裝配置教程

    CentOS 7中 Apache Web 服務(wù)器安裝配置教程

    這篇文章主要介紹了CentOS 7中 Apache Web 服務(wù)器安裝配置教程,需要的朋友可以參考下
    2018-04-04
  • Ubuntu 18.04更換apt-get源的方法

    Ubuntu 18.04更換apt-get源的方法

    這篇文章主要介紹了Ubuntu 18.04更換apt-get源的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Linux中配置DNS正向解析

    Linux中配置DNS正向解析

    本文介紹了如何配置DNS正向解析,包括編輯named.conf文件、abc.zone文件和啟動(dòng)服務(wù),配置中需注意文件格式和權(quán)限設(shè)置,實(shí)驗(yàn)通過(guò)配置DNS服務(wù)器實(shí)現(xiàn)域名到IP的解析,這對(duì)網(wǎng)絡(luò)管理和維護(hù)非常重要,關(guān)閉防火墻和設(shè)置SELinux為disabled是實(shí)驗(yàn)的基礎(chǔ)環(huán)境配置,通過(guò)實(shí)驗(yàn)
    2024-09-09
  • jmeter在linux系統(tǒng)下運(yùn)行及本地內(nèi)存調(diào)優(yōu)的方法詳解

    jmeter在linux系統(tǒng)下運(yùn)行及本地內(nèi)存調(diào)優(yōu)的方法詳解

    這篇文章主要介紹了jmeter在linux系統(tǒng)下運(yùn)行及本地內(nèi)存調(diào)優(yōu)的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • linux下如何查看hosts文件

    linux下如何查看hosts文件

    這篇文章主要介紹了linux下如何查看hosts文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • MemcacheQ安裝及使用方法

    MemcacheQ安裝及使用方法

    MemcacheQ 是一個(gè)簡(jiǎn)單的分布式隊(duì)列服務(wù),它的運(yùn)行依賴于BerkeleyDB 和 libevent,所以需要先安裝BerkeleyDB和libevent,需要的朋友可以參考下
    2017-03-03
  • Ubuntu18.04安裝Nvidia顯卡驅(qū)動(dòng)教程(圖文)

    Ubuntu18.04安裝Nvidia顯卡驅(qū)動(dòng)教程(圖文)

    這篇文章主要介紹了Ubuntu18.04安裝Nvidia顯卡驅(qū)動(dòng)教程(圖文),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論