C語言裡面常用的時間日期函式總結

2021-05-24 04:56:18 字數 1752 閱讀 6563

時間型別定義:

標頭檔案:time.h    

定義為:time_t     某些系統定義為 typedef long time_t

獲取時間函式:

time_t time(time_t * timer);

time_t time_now;

time(&time_now);

輸出時間函式:

char *ctime(const time_t *time);

printf(「%s」,ctime(&time_now));

轉化時間函式:

struct tm *localtime(const time_t *clock);

struct tm *tmp = localtime(&time_now);

tmp->tm_mon 表示月份

tmp->tm_day 表示年

struct tm的裡面的元素是秒,分,時,日,月,年,夏令時標誌。

反轉函式:time_t mktime(strcut tm * timeptr);

改函式使用需要慎重,

因為有可能遇到各種各樣的日期格式!

計算時間差值:double difftime(time_t time2, time_t time1);

返回time2-time1的值,返回值是double型!

注1:

獲取時間之後,使用locatime函式進行轉換,輸出的日期需要月份加1,年份加1900。因為所求出的秒數是從1970.1.1 00:00:00 至今獲取的。

如下面的程式:

注2:

以上的時間都是取的本地時間,而本地時間和utc是有區別的,也就是格林威治時間。

若想獲取格林威治時間,使用函式gmtime();

struct tm *gmtime(const time_t *tp);   //將本地時間轉換為格林威治時間。

注3:

在一些系統中,time_t被定義為:typedef long time_t,如果這樣的話,最大的時間是什麼時候?下面程式實現之:

輸出結果為:

tue jan 19 11:14:07 2038

這說明,到了這個時刻,時間計數將從0開始,系統就是面臨著重大的bug。

如何解決這個問題,以下是個人猜想:

定義時間為 typedef long long time_t;

這樣,儲存的秒數則為231,除以一年的秒數(365*24*60*60),應該是夠用的了!

而像是定義為 long long 型,該怎麼儲存計算呢?

如果是64位的系統,則計算機一次定址可以是64位,也就是完全可以勝任;

如果是32位的系統,應該定義成陣列,類似的a[2]來實現之。

注4:

在使用夏令時轉換的時候,一天並不是24小時,所以使用86400秒/天時需要注意。

注5:

其它的時間函式,這裡就不詳細講了。

clock_t clock(void);

char *asctime(const struct tm *tp);

size_t strftime(char *s,size_t smax,const char *fmt,congst struct tm *tp);

儒略日數方案(jnlian day numbers);

c 時間日期函式集總

通過timer控制項可以達到時間動態變化的效果,設定在labbel控制項裡顯示獲取的時間。假定現在時間為 2007 11 5 星期六,則以下 獲取的系統時間為 datetime dt datetime.now label1.text dt.tostring 2007 11 5 13 21 25 la...

c 時間日期函式

datetime dt datetime.now label1.text dt.tostring 2007 11 5 13 21 25 label2.text dt.tofiletime tostring 127756416859912816 label3.text dt.tofiletimeutc...

Mysql常用的時間日期函式

目 錄 0 前言 1 獲取當前時刻的時間函式 1.1 返回當前時刻的時間 1.2 獲取當前時刻的年月日 1.3 獲取當前時刻的時分秒 1.4 獲取當前時刻的所在的週數 1.5 獲取當前是一周內的週幾 1.6 extract函式返回當前日期中所在的年 月 日等 2 日期之間的時間運算 2.1 計算當前...