您好,登錄后才能下訂單哦!
本文小編為大家詳細(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í)間戳——也就是一個(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è) —— 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è)資訊頻道。
免責(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)容。