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

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

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

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

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

void getNowTime()
{
 timespec time;
 clock_gettime(CLOCK_REALTIME, &time); //獲取相對于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語言的時間函數(shù),他可以用于計算精度和納秒。

語法:

#include<time.h>

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

參數(shù):

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

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

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

{

time_t tv_sec; /* 秒*/

long tv_nsec; /* 納秒*/

};

localtime()

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

語法

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

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

返回值:返回指向tm 結(jié)構(gòu)體的指針.tm結(jié)構(gòu)體是time.h中定義的用于分別存儲時間的各個量(年月日等)的結(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ù),下面這個例子不使用這個函數(shù)一樣能獲取系統(tǒng)當(dāng)前時間。需要注意的是年份加上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; 
}

最后出來的結(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.

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

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

因此localtime()不是可重入的。同時libc里提供了一個可重入版的函數(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; 
}

最后出來的結(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;  /* 時 - 取值區(qū)間為[0,23] */ 
     int tm_mday;  /* 一個月中的日期 - 取值區(qū)間為[1,31] */ 
     int tm_mon;  /* 月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11] */ 
     int tm_year;  /* 年份,其值等于實際年份減去1900 */ 
     int tm_wday; /* 星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一 */ 
     int tm_yday; /* 從每年1月1日開始的天數(shù)– 取值區(qū)間[0,365],其中0代表1月1日 */ 
     int tm_isdst; /* 夏令時標(biāo)識符,夏令時tm_isdst為正;不實行夏令時tm_isdst為0 */ 
   };

time 函數(shù)

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

原型: time_t time(time_t *calptr) 

結(jié)果可以通過返回值,也可以通過參數(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);

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

相關(guān)文章

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

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

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

    Apache2.4.2編譯安裝2個常見錯誤和解決方法

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

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

    經(jīng)常上網(wǎng)的讀者會遇到這種情況:訪問一些網(wǎng)站的某些資源時,瀏覽器彈出一個對話框,要求輸入用戶名和密碼來獲取對資源的訪問。
    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源的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Linux中配置DNS正向解析

    Linux中配置DNS正向解析

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

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

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

    linux下如何查看hosts文件

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

    MemcacheQ安裝及使用方法

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

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

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

最新評論