溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c語言怎么獲取當(dāng)前日期和時(shí)間

發(fā)布時(shí)間:2022-04-02 14:35:02 來源:億速云 閱讀:2169 作者:iii 欄目:移動(dòng)開發(fā)

本文小編為大家詳細(xì)介紹“c語言怎么獲取當(dāng)前日期和時(shí)間”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“c語言怎么獲取當(dāng)前日期和時(shí)間”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

頭文件 time.h

#include <time.h>

要獲取時(shí)間,就不得不說一個(gè)函數(shù) time()

原型: time_t time(time_t * timer)

php語言中就有time() 這個(gè)函數(shù),返回一個(gè)時(shí)間戳&mdash;&mdash;也就是一個(gè)整數(shù)。然后再通過 date() 函數(shù)進(jìn)行格式化,轉(zhuǎn)換成我們想要的時(shí)間格式。 在C中,該函數(shù)的功能是獲取當(dāng)前的系統(tǒng)時(shí)間,返回的是一個(gè)time_t 類型的值。 也是一個(gè)時(shí)間戳。其實(shí)就是一個(gè)大整數(shù)。這個(gè)整數(shù)值是怎么算出來的呢,就是從 UTC(Coordinate Universal Time) 時(shí)間1970年1月1日00:00:00(稱為UNIX系統(tǒng)的Epoch時(shí)間)到當(dāng)前時(shí)刻的秒數(shù)。

僅僅有這個(gè)秒數(shù)還是不夠的,還需要一種方式將其轉(zhuǎn)化為我們需要的格式。在C中可以調(diào)用localtime()函數(shù)將time_t表示的UTC時(shí)間轉(zhuǎn)換為本地時(shí)間(我們是+8區(qū),比UTC多8個(gè)小時(shí))并轉(zhuǎn)成 struct tm類型。

time_t的數(shù)字是按UTC算的,跟時(shí)區(qū)無關(guān),同一個(gè)時(shí)刻全球所有計(jì)算機(jī)上的time(NULL)返回值都相同。 用localtime()轉(zhuǎn)換成可顯示的格式時(shí)才需要考慮時(shí)區(qū)。

將 time_t 轉(zhuǎn)化為 struct tm 的函數(shù)有兩個(gè) &mdash;&mdash; localtime()和 gmtime()

原型: struct tm * localtime(time_t *timer) 和 struct tm * gmtime(time_t *timer)

這兩個(gè)函數(shù)的區(qū)別是 gmtime() 轉(zhuǎn)換出來的是 0 時(shí)區(qū)的時(shí)間。而 localtime() 是將本地的時(shí)區(qū)計(jì)算在內(nèi)的。 什么意思呢,就是說我們的時(shí)區(qū)是+8區(qū),比UTC多8個(gè)小時(shí)。假設(shè)當(dāng)前時(shí)間是 15:40:56。 使用 gmtime() 轉(zhuǎn)出來之后就是 7:40:56; 使用 localtime() 轉(zhuǎn)出來之后就是 15:40:56。

下面再來介紹struct tm

struct tm {int tm_sec;  // 秒int tm_min;  // 分int tm_hour; // 時(shí)int tm_mday; // 日int tm_mon;  // 月int tm_year; // 年int tm_wday; // 表示周幾  0-6 (0:周日 1:周一 2:周二  3:周三 4:周四 5:周五 6:周六)int tm_yday; // 從 一月一日開始算到現(xiàn)在是一年中的第幾天 取值 0-365int tm_isdst; // 表示是否是夏令時(shí)  1是  0否   在mktime() 函數(shù)中使用  有時(shí)候?yàn)?1,則由mktime() 自己去判斷是否是夏令時(shí)};

需要注意的是 tm_mon 是從 0 開始的,也就是說月份要加 1; tm_year 是表示從1900到現(xiàn)在過了多少年,也就是今年和1900年的一個(gè)差值。所以要使用 tm_year+1900 才表示今年的年份。

下面是完整的例子

#include <time.h>#include <stdio.h>int main(void){time_t time_ptr;struct tm *tmp_ptr = NULL;int year,month,day,hour,minute,sec;// 獲取當(dāng)前時(shí)間time(&time_ptr);
    tmp_ptr = localtime(&time_ptr);

    year = tmp_ptr->tm_year + 1900;
    month = tmp_ptr->tm_mon + 1;
    day = tmp_ptr->tm_mday;

    hour = tmp_ptr->tm_hour;
    minute = tmp_ptr->tm_min;
    sec = tmp_ptr->tm_sec;    printf(date_time,"[%d-%d-%d %d:%d:%d] ",year,month,day,hour,minute,sec);return 0;
}

讀到這里,這篇“c語言怎么獲取當(dāng)前日期和時(shí)間”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI