日期與時間函式與夏令時的關係

2021-07-11 22:55:23 字數 2110 閱讀 6881

測試環境:vmware12 pro+centos 7

1. time_t 為從公元1970 年1 月1 日0 時0 分0 秒算起至今的utc 時間所經過的秒數

2. 結構tm的定義為

struct tm;

1.   time_t time(time_t *t);
該函式會返回從公元2023年1月1日的utc時間從0時0分0秒算起到現在所經過的秒數,若傳入的引數非空,此函式也會將返回值存入到t指標所指向的記憶體。

2.  struct tm *gmtime(const time_t *timep); / struct tm *gmtime_r(const time_t *timep, struct tm *result);

該函式返回值為未經時區轉換的時間,即utc時間,但返回值指向乙個靜態分配的結構,該結構可能會被接下來的任何日期和時間函式呼叫覆蓋。gmtime_r()函式功能與此相同,但是它可以將資料儲存到使用者提供的結構體中

3.  struct tm *localtime(const time_t *timep); / struct tm *localtime_r(const time_t *timep, struct tm *result);

該函式返回值為已經轉換為當前時區的時間,即dst時間(當前時區為夏令時時,返回的時間也為夏令時),但返回值指向乙個靜態分配的結構,該結構可能會被接下來的任何日期和時間函式呼叫覆蓋。localtime_r()函式功能與此相同,但是它可以將資料儲存到使用者提供的結構體中。它不需要設定tm.

4.  time_t mktime(strcut tm * timeptr);

該函式將引數timeptr所指的tm結構資料轉換為time_t資料。tm

中的標誌位

tm_isdst

會影響函式的返回值。

1為夏令時

0為非夏令時

-1則無效。

5.  char *ctime(const time_t *timep);

該函式將引數timep所指的time_t結構中的資訊轉為由時區轉換成的當地時間的字串,和localtime一樣,可能會有夏令時的影響。

6. char *asctime(const struct tm * timeptr);

該函式將但會字串表示傳入引數timeptr的日期時間,tm中的標誌位tm_isdst會影響函式的返回值,若大於0則返回當前時區的夏令時,等於0則返回當前時區的標準時(冬令時)

utc 世界協調時間,又稱世界標準時間

dst 夏日節約時間,所以有夏令時的冬令時的區別

#include #include int main(void)

結果: [root@bogon ~]# date

sun may 22 23:23:04 pdt 2016

[root@bogon ~]# ./main2

1463984646

sun may 22 23:24:06 2016

0mon may 23 06:24:06 2016

1sun may 22 23:24:06 2016

1463984646

1463984646

1463988246

[root@bogon ~]# date

sun may 22 22:26:08 pst 2016

[root@bogon ~]# ./main2

1463984772

sun may 22 22:26:12 2016

0mon may 23 06:26:12 2016

0sun may 22 22:26:12 2016

1463984772

1463984772

1463984772

其它 關於時間函式mktime函式夏令時的問題

在很多應用中,我們會用mktime函式進行時間準換操作,但這裡面有乙個夏令時的操作問題 我們的最終目的是把字串格式的時間轉換為內部使用的 日曆時間 即到utc 1970年1月1日零時的秒數。這裡就存在夏令時的問題。比如俄羅斯時間2008年10月26日2 30由於夏令時的跳變會經過兩次,這兩次所代表的...

日期與時間函式

1 select curdate 2select current date 3 select curdate 0 將查詢出來的日期格式轉化為數字45 select curtime 6select current time 7 select curtime 0 將查詢出來的時間格式轉化為數字 1 se...

關於用程式設計 取本地時間時,會有夏令時的坑,

zhenmu zhenmu tz gst 1 export tz zhenmu zhenmu date y m d h m s d 1583712000 2020 03 09 01 00 00 zhenmu zhenmu date y m d h m s d 1592352000 2020 06 1...