時間與日期

2021-06-05 17:45:29 字數 2361 閱讀 4277

通常確定時間和日期對乙個程式來說是很有用的,程式可能希望記錄執行時間.或者在某一時間後改變執行方式.例如乙個遊戲可能需要玩家在倒計時內完成某個任務

所有的unix系統都使用同一時間和日期起點:格林威治時間(gmt)2023年1月1日.而ms-dos紀元開始於2023年.

時間通過乙個長整型的預定義型別time_t來表示,它和其他時間相關函式在time.h中定義.

通過time_t time(time_t *time_ptr)函式獲得time_t變數的值,該函式將當前時間與紀元時間之差的秒數賦給引數,也可以通過返回值方式返回.

兩個時間之間的秒差可以用time_t型別的time1-time2,linux也提供了乙個double difftime(time_t time1, time_t time2)函式返回time1-time2的值(不知道這麼做有什麼用)

有一些標準函式提供更符合人們習慣的時間日期:

1.struct tm *gmtime(const time_t time)

tm結構體定義如下:

#ifndef _tm_defined

struct tm ;

#define _tm_defined

#endif

ansi c標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。

gmtime()把底層時間值分解成時間結構tm,這樣我們可以用printf()函式將含義明顯的時間和日期列印出來

printf("date:%d-%d-%d-%d \n", timeptr->tm_year, timeptr->tm_mon, timeptr->tm_mday);

printf("time:%d:%d:%d:%d \n", timeptr->tm_hour, timeptr->tm_min, timeptr->tm_sec);

2.struct tm *localtime(const time_t *time)

gmtime()得出的是世界標準時間,這麼做是為了同步全球各地所有程式的時間和日期.要看當地的時間,就需要localtime()

3.char *asctime(const struct tm *timeptr)

為了得到像date命令那樣的友好時間,我們使用asctime()獲得乙個表示時間和日期的字串,該函式以tm結構為引數

4.char *ctime(const time_t *time)

做用與asctime()一樣,區別是它以time_t型別變數為引數

5.size_t strftime(char *buf, size_t len, constchar *format, const tm *timeptr)

與sprintf()類似,format中棖式字串的格式命令把timeptr中儲存的時間資訊放在strdest指向的字串中,最多向strdest中存放maxsize個字元。該函式返回向strdest指向的字串中放置的字元數。

函式strftime()的操作有些類似於sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在乙個字串中。格式化命令說明串strdest中各種日期和時間資訊的確切表示方法。格式串中的其他字元原樣放進串中。格式命令列在下面,它們是區分大小寫的。

%a 星期幾的簡寫

%a 星期幾的全稱

%b 月份的簡寫

%b 月份的全稱

%c 標準的日期的時間串

%c 年份的後兩位數字

%d 十進位制表示的每月的第幾天

%d 月/天/年

%e 在兩字元域中,十進位制表示的每月的第幾天

%f 年-月-日

%g 年份的後兩位數字,使用基於周的年

%g 年份,使用基於周的年

%h 簡寫的月份名

%h 24小時制的小時

%i 12小時制的小時

%j 十進位制表示的每年的第幾天

%m 十進位制表示的月份

%m 十時制表示的分鐘數

%n 新行符

%p 本地的am或pm的等價顯示

%r 12小時的時間

%r 顯示小時和分鐘:hh:mm

%s 十進位制的秒數

%t 水平製表符

%t 顯示時分秒:hh:mm:ss

%u 每週的第幾天,星期一為第一天 (值從0到6,星期一為0)

%u 第年的第幾周,把星期日作為第一天(值從0到53)

%v 每年的第幾周,使用基於周的年

%w 十進位制表示的星期幾(值從0到6,星期天為0)

%w 每年的第幾周,把星期一做為第一天(值從0到53)

%x 標準的日期串

%x 標準的時間串

%y 不帶世紀的十進位制年份(值從0到99)

%y 帶世紀部分的十制年份

%z,%z 時區名稱,如果不能得到時區名稱則返回空字元。

%% 百分號

c 時間與日期

注意c 11有更強大的方法!隨機數及atoi include int abs int num 功能 函式返回引數num.的絕對值。double atof const char str 功能 將字串str轉換成乙個雙精度數值並返回結果。int atoi const char str 功能 將字串str...

Linux C 時間與日期

linux下儲存時間常見的有兩種儲存方式,乙個是從1970年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。time t 這種型別就是用來儲存從1970年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。struct timeval 而直接儲存年...

Linux C 時間與日期

linux下儲存時間常見的有兩種儲存方式,乙個是從1970年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。time t 這種型別就是用來儲存從1970年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。struct timeval 而直接儲存年...