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

C語(yǔ)言每日練習(xí)之動(dòng)態(tài)顯示系統(tǒng)時(shí)間

 更新時(shí)間:2021年11月11日 11:06:45   作者:小輝_Super  
這篇文章主要介紹了C語(yǔ)言動(dòng)態(tài)顯示系統(tǒng)時(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

分析

C語(yǔ)言的時(shí)間庫(kù)函數(shù)基本都在time.h里,該頭文件主要包含三種形式的時(shí)間量,一種是time_t類型(原型為long),表示當(dāng)前時(shí)間到1970年1月1日的總秒數(shù);一種是struct tm類型,里面是時(shí)間日期的數(shù)據(jù);還有一種clock_t,這個(gè)類型本文用不到,它表示與處理器時(shí)鐘有關(guān)的時(shí)間數(shù)據(jù)。

本文將介紹4種顯示系統(tǒng)時(shí)間的方法:

  • 第一種直接用ctime函數(shù)將time_t類型的秒數(shù)據(jù)轉(zhuǎn)換成字符串;
  • 第二種先通過(guò)time_t類型變量獲取秒數(shù)據(jù),然后再用localtime()函數(shù)將秒數(shù)據(jù)轉(zhuǎn)換成struct tm類型數(shù)據(jù),最后將struct tm類型變量的結(jié)構(gòu)體成員分別打印,同時(shí)打印格式可以自己隨意控制。
  • 第三種在第二種的基礎(chǔ)上,使用strftime()函數(shù),格式化打印時(shí)間數(shù)據(jù),這些格式有專門的規(guī)范,具體參數(shù)可以自行百度。
  • 第四種在第三種的基礎(chǔ)上,增加了毫秒和微秒顯示,不過(guò)需要新增一個(gè)數(shù)據(jù)類型strcut timeval和gettimeofday()函數(shù),該函數(shù)和time()作用類似,都是獲取秒數(shù),但后者是將獲取的秒數(shù)傳給time_t類型變量。

代碼實(shí)現(xiàn)

1.簡(jiǎn)易版

time_t time(time_t *timer):time() 是指返回自 Unix 紀(jì)元(January 1 1970 00:00:00 GMT)起的當(dāng)前時(shí)間的秒數(shù)的函數(shù),主要用來(lái)獲取當(dāng)前的系統(tǒng)時(shí)間,返回的結(jié)果是一個(gè)time_t類型。
char *ctime(const time_t *timer):把日期和時(shí)間轉(zhuǎn)換為字符串,函數(shù)形參為time_t類型。
——百度百科

ctime()這個(gè)函數(shù)會(huì)根據(jù)本地時(shí)區(qū)進(jìn)行轉(zhuǎn)換,字符串格式為"Wed Jun 30 21 :49 :08 1993\n"

#include <stdio.h>
#include <time.h>


int main ()
{
    time_t tt;
    time(&tt);     //獲取秒數(shù)
    printf ( "當(dāng)前本地時(shí)間為: %s", ctime(&tt));
    return 0;
}

運(yùn)行結(jié)果:

在這里插入圖片描述

2.自定義格式版

struct tm結(jié)構(gòu)體成員:

struct tm {
  int tm_sec;         /* 秒,范圍從 0 到 59        */
  int tm_min;         /* 分,范圍從 0 到 59        */
  int tm_hour;        /* 小時(shí),范圍從 0 到 23        */
  int tm_mday;        /* 一月中的第幾天,范圍從 1 到 31    */
  int tm_mon;         /* 月,范圍從 0 到 11        */
  int tm_year;        /* 自 1900 年起的年數(shù)        */
  int tm_wday;        /* 一周中的第幾天,范圍從 0 到 6    */
  int tm_yday;        /* 一年中的第幾天,范圍從 0 到 365    */
  int tm_isdst;       /* 夏令時(shí)                */
};

struct tm *gmtime(const time_t *timer):將time_t類型變量轉(zhuǎn)換為struct tm類型變量,同時(shí)使用協(xié)調(diào)世界時(shí)(UTC),也稱為格林尼治標(biāo)準(zhǔn)時(shí)間(GMT)【應(yīng)該不常用】
struct tm *localtime(const time_t *timer):和gmtime功能類似,將time_t類型變量轉(zhuǎn)換為struct tm類型變量,但時(shí)間由本地時(shí)區(qū)決定。
char *asctime(const struct tm *timeptr):把日期和時(shí)間轉(zhuǎn)換為字符串,函數(shù)形參為struct tm類型。
——百度百科

【注意】tm_year是從1900年算起,所以打印它時(shí)需要加上1900;tm_mon從0開始算,所以打印它時(shí)需要加1。

#include <time.h>
#include <stdio.h>
#include <conio.h>                //kbhit()/_kbhit()
#include <Windows.h>              //Sleep(ms)

int main(void)
{
    time_t tt_;
    struct tm *tm_ ;
    while(!kbhit())               //按下鍵盤任意鍵退出循環(huán)(包括鼠標(biāo)點(diǎn)擊)
    {
        time(&tt_);               //獲取秒數(shù)
        tm_ = localtime(&tt_);    //將秒數(shù)轉(zhuǎn)換為本地時(shí)間(北京時(shí)間)
      //tm_ = gmtime(&tt_);       //將秒數(shù)轉(zhuǎn)換為UTC時(shí)區(qū)時(shí)間(不建議使用)

        /* 自己定義打印樣式; %02d:寬度為兩個(gè)整型,如果不夠,左邊補(bǔ)零; \r:回車不換行 */
        printf("當(dāng)前時(shí)間:%d年%d月%d日 %02d:%02d:%02d\r", 1900 + tm_->tm_year,\
               tm_->tm_mon + 1, tm_->tm_mday, tm_->tm_hour, tm_->tm_min, tm_->tm_sec);

        /* 使用asctime函數(shù)打印tm變量表示的時(shí)間( 自帶回車換行) */
        //printf("當(dāng)前本地時(shí)間為: %s", asctime(tm_));

        Sleep(500);               //0.5s延時(shí)
    }

    return 0;
}

運(yùn)行結(jié)果:

動(dòng)態(tài)打印本地時(shí)間(自定義格式):

請(qǐng)?zhí)砑訄D片描述

動(dòng)態(tài)打印UTC時(shí)間(自定義格式),時(shí)間比本地時(shí)間早8小時(shí):

請(qǐng)?zhí)砑訄D片描述

使用asctime函數(shù)動(dòng)態(tài)打印本地時(shí)間,打印間隔0.5s:

請(qǐng)?zhí)砑訄D片描述

3.格式化輸出版

size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr):根據(jù)format指定的格式(格式必須符合要求),將時(shí)間數(shù)據(jù)存入字符串str中,想了解具體的格式,可以自行百度,這里簡(jiǎn)單介紹下面程序使用到的格式參數(shù):
%Y:年份(真實(shí)年份,不需加1900)
%m:月份(01-12)
%d:一月中的第幾天(01-31)
%H:小時(shí)(00-23)
%M:分(00-59)
%S:秒(00-59)
——百度百科

#include <time.h>
#include <stdio.h>
#include <conio.h>                //kbhit()/_kbhit()
#include <Windows.h>              //Sleep(ms)

int main(void)
{
    time_t tt_;
    struct tm *tm_ ;
    char output[20];
    while(!kbhit())               //按下鍵盤任意鍵退出循環(huán)(包括鼠標(biāo)點(diǎn)擊)
    {
        time(&tt_);               //獲取秒數(shù)
        tm_ = localtime(&tt_);    //將秒數(shù)轉(zhuǎn)換為本地時(shí)間(北京時(shí)間)

        /* 格式化打印 */
        strftime(output, 20, "%Y-%m-%d %H:%M:%S", tm_);
        printf("當(dāng)前時(shí)間:%s\r", output); //回車不換行
        Sleep(500);               //0.5s延時(shí)
    }
    return 0;
}

運(yùn)行結(jié)果:

請(qǐng)?zhí)砑訄D片描述

4.精細(xì)版(毫秒+微秒)

struct timeval結(jié)構(gòu)體成員:

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

int gettimeofday (struct timeval * tv, struct timezone * tz):獲得當(dāng)前精確時(shí)間(1970年1月1日到現(xiàn)在的時(shí)間),其參數(shù)tv是保存獲取時(shí)間結(jié)果的結(jié)構(gòu)體,參數(shù)tz用于保存時(shí)區(qū)結(jié)果,函數(shù)執(zhí)行成功后返回0,失敗后返回-1
——百度百科

gettimeofday()和前面提到的time()函數(shù)功能類似,都是獲取時(shí)間,但它們形參和返回值差別還是很大的。

int main(void)
{
    time_t tt_;
    struct tm *tm_ ;
    struct timeval tv_;
    long tv_ms = 0, tv_us = 0;
    char output[20];
    while(!kbhit())                //按下鍵盤任意鍵退出循環(huán)(包括鼠標(biāo)點(diǎn)擊)
    {
        time(&tt_);                //獲取秒數(shù)保存到time_t變量
        tm_ = localtime(&tt_);     //將秒數(shù)轉(zhuǎn)換為本地時(shí)間(北京時(shí)間)
        gettimeofday(&tv_,NULL);   //獲取1970-1-1到現(xiàn)在的時(shí)間保存到timeval變量

        /* 格式化打印 */
        strftime(output, 20, "%Y-%m-%d %H:%M:%S", tm_);
        tv_ms = tv_.tv_usec / 1000;//獲取毫秒
        tv_us = tv_.tv_usec % 1000;//獲取微秒
        printf("當(dāng)前時(shí)間:%s %ld:%ld\r", output,\
               tv_ms / 10, tv_us / 10);   //改成100進(jìn)1
        Sleep(1);                  //ms延時(shí)
    }
    return 0;
}

運(yùn)行結(jié)果:

請(qǐng)?zhí)砑訄D片描述

網(wǎng)上參考

網(wǎng)上找到一篇能夠顯示毫秒的時(shí)間打印代碼,不過(guò)只適用于Windows平臺(tái):

原文鏈接:用C語(yǔ)言動(dòng)態(tài)打印當(dāng)前時(shí)間(精確到毫秒)

#include <stdio.h> 
#include <windows.h> 

int main( void ) 
{ 
	SYSTEMTIME sys; 
	while(1){
		printf("當(dāng)前時(shí)刻為:\n"); 	 
		//獲取系統(tǒng)時(shí)間 
		GetLocalTime( &sys ); 
		//按照年/月/日 時(shí)/分/秒.毫秒 星期幾格式打印 
		printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",
		sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute, 
		sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); 
		Sleep(1);
		//清屏命令 
		system("cls");
	}
	return 0;
}

運(yùn)行效果:

他使用清屏來(lái)實(shí)現(xiàn)單行打印,這樣容易造成頻閃現(xiàn)象,其實(shí)只要將\n換成成\r就行了。

請(qǐng)?zhí)砑訄D片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++利用容器查找重復(fù)列功能實(shí)現(xiàn)

    C++利用容器查找重復(fù)列功能實(shí)現(xiàn)

    本文將詳細(xì)介紹c++容器簡(jiǎn)介,c++容器的比較 與操作實(shí)例,需要了解更多的朋友可以參考下
    2012-11-11
  • C++順序表的實(shí)例代碼

    C++順序表的實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)順序表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • C語(yǔ)言詳解float類型在內(nèi)存中的存儲(chǔ)方式

    C語(yǔ)言詳解float類型在內(nèi)存中的存儲(chǔ)方式

    在c語(yǔ)言中float函數(shù)是單精度的。它在內(nèi)存中以二進(jìn)制的形式存儲(chǔ)。分為符號(hào)位,階碼與尾數(shù)三部分,下面我們?cè)敿?xì)來(lái)了解一下
    2022-04-04
  • C++中allocator類使用示例

    C++中allocator類使用示例

    大家好,本篇文章主要講的是C++中allocator類使用示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 適合初學(xué)者練習(xí)的C語(yǔ)言實(shí)現(xiàn)三子棋小游戲

    適合初學(xué)者練習(xí)的C語(yǔ)言實(shí)現(xiàn)三子棋小游戲

    今天這篇文章主要介紹給大家分享一個(gè)適合初學(xué)者練習(xí)的利用C語(yǔ)言寫三子棋小游戲,用簡(jiǎn)單的C語(yǔ)言來(lái)實(shí)現(xiàn)小時(shí)候玩的三子棋游戲,下面是人機(jī)對(duì)戰(zhàn),當(dāng)然這個(gè)代碼的電腦對(duì)手是人工智障而不是人工智能 詳細(xì)內(nèi)容就請(qǐng)跟小編一起來(lái)閱讀下面文章內(nèi)容吧
    2021-10-10
  • C++單例類模板詳解

    C++單例類模板詳解

    這篇文章主要介紹了C++單例類模板,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列詳解

    C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列詳解

    這篇文章主要為大家介紹了C++數(shù)據(jù)結(jié)構(gòu)的隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-11-11
  • C++實(shí)現(xiàn)不能被繼承的類實(shí)例分析

    C++實(shí)現(xiàn)不能被繼承的類實(shí)例分析

    這篇文章主要介紹了C++實(shí)現(xiàn)不能被繼承的類實(shí)例分析,對(duì)于C++初學(xué)者而言可以通過(guò)本文實(shí)例更好的理解類的原理及運(yùn)用,需要的朋友可以參考下
    2014-08-08
  • C語(yǔ)言實(shí)現(xiàn)漢諾塔游戲

    C語(yǔ)言實(shí)現(xiàn)漢諾塔游戲

    個(gè)人覺(jué)得漢諾塔這個(gè)遞歸算法比電子老鼠的難了一些,不過(guò)一旦理解了也還是可以的,其實(shí)網(wǎng)上也有很多代碼,可以直接參考。記得大一開始時(shí)就做過(guò)漢諾塔的習(xí)題,但是那時(shí)代碼寫得很長(zhǎng)很長(zhǎng),也是不理解遞歸的結(jié)果。今天重新來(lái)實(shí)現(xiàn)一下
    2015-03-03
  • 基于Qt實(shí)現(xiàn)離線瓦片地圖下載器

    基于Qt實(shí)現(xiàn)離線瓦片地圖下載器

    這篇文章主要介紹了如何通過(guò)Qt實(shí)現(xiàn)離線瓦片地圖下載器,文中的示例代碼對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-01-01

最新評(píng)論