時間型別定義:
標頭檔案: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 計算當前...