有關linux時間函數的總結

來源:互聯網
上載者:User

首先搞清楚兩個概念:

1、日曆時間(Calendar Time)是通過time_t資料類型來表示的,用time_t表示的時間(日曆時間)是從一個時間點(例如:1970年1月1日0時0分0秒)到此時的秒數。在time.h中,我們也可以看到time_t是一個長整型數。

2、在標準C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下:

struct tm {
        int tm_sec;     /* 秒 – 取值區間為[0,59] */
        int tm_min;     /* 分 - 取值區間為[0,59] */
        int tm_hour;    /* 時 - 取值區間為[0,23] */
        int tm_mday;    /* 一個月中的日期 - 取值區間為[1,31] */
        int tm_mon;     /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */
        int tm_year;    /* 年份,其值等於實際年份減去1900 */
        int tm_wday;    /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */
        int tm_yday;    /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
        int tm_isdst;   /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/
        };

所以  現在詳解以下幾個函數:

1、asctime(將時間和日期以字串格式表示)

char * asctime(const struct tm * timeptr):

函數說明

asctime()將參數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。此函數已經由時區轉換成當地時間,字串格式為:“Wed Jun 30 21:49:08 1993\n”

傳回值

若再調用相關的時間日期函數,此字串可能會被破壞。此函數與ctime不同處在於傳入的參數是不同的結構。

2、char *ctime(const time_t *timep);
(將時間和日期以字串格式表示):

函數說明:將參數timep所指的time_t結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。

3、int gettimeofday(struct timeval * tv , struct timezone * tz ):

函數說明:gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的資訊則放到tz結構中。

timeval結構:

struct timeval{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};

timezone結構:

struct timezone{
int tz_minuteswest; /*和Greenwich 時間差了多少分鐘*/
int tz_dsttime; /*日光節約時間的狀態*/
};


4、struct tm*gmtime(const time_t*timep);

函數說明:

gmtime()將參數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。

5、struct tm *localtime(const time_t * timep);

函數說明:將參數timep
所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果由結構tm返回。此函數返回的時間日期已經轉換成當地時區。

6、mktime(將時間結構資料轉換成經過的秒數)

time_t mktime(strcut tm * timeptr);

函數說明:mktime()用來將參數timeptr所指的tm結構資料轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。

7、settimeofday(設定目前時間)

int settimeofday ( const struct timeval *tv,const struct timezone *tz);

函數說明:settimeofday()會把目前時間設成由tv所指的結構資訊,當地時區資訊則設成tz所指的結構。詳細的說明請參考gettimeofday()。注意,只有root許可權才能使用此函數修改時間。


8、time(取得目前的時間)

time_t time(time_t *t);

函數說明此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t
並非null 指標的話,此函數也會將傳回值存到t指標所指的記憶體。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.