unix時間戳time_t與UTC時區的關系


 

一般我用C寫unix時間戳是這樣子的

#include<stdio.h>
#include<time.h>

void printfDateTimeStr(struct tm *stm){
    char weekday[][4]={"","","","","","",""};
    printf("timestr=%04d-%02d-%02d %02d:%02d:%02d 星期%s\n",stm->tm_year+1900,stm->tm_mon+1,stm->tm_mday,stm->tm_hour,stm->tm_min,stm->tm_sec,weekday[stm->tm_wday]);
}

int main(){

    time_t unix_timestamp=1429641418;
    unix_timestamp = time(NULL);
    
    struct tm *tmdate=localtime(&unix_timestamp);
    printf("unix_timestamp 現在的時間戳是=%d\n", unix_timestamp);
    printf("Local Time is :asctime=%s", asctime(tmdate));
    printf("格林威治GMT Time is   :gmtime=%s", asctime(gmtime(&unix_timestamp)));
    printfDateTimeStr(tmdate);
    
    printf("========================================\n");
    printf("input your unix_timestamp:");
    scanf("%d",&unix_timestamp);
    
    struct tm *stm=localtime(&unix_timestamp);
    printf("你的 unix_timestamp 時間戳是=%d\n",unix_timestamp);
    printf("你的 Local Time is :asctime=%s",asctime(stm));
    printf("你的 格林威治GMT Time is   :gmtime=%s",asctime(gmtime(&unix_timestamp)));
    printfDateTimeStr(stm);

    char c;
    scanf("%c",&c);
    return 0;
}

 

運行結果:

unix_timestamp 現在的時間戳是=1429787951
Local Time is :asctime=Thu Apr 23 19:19:11 2015
格林威治GMT Time is :gmtime=Thu Apr 23 11:19:11 2015
timestr=2015-04-23 11:19:11 星期四 dst[0]
========================================
input your unix_timestamp:0
你的 unix_timestamp 時間戳是=0
你的 Local Time is :asctime=Thu Jan 01 08:00:00 1970
你的 格林威治GMT Time is :gmtime=Thu Jan 01 00:00:00 1970
timestr=1970-01-01 00:00:00 星期四 dst[0]

time_t =0 的時候 其實是 1970-01-01 00:00:00 到UTC 0時區的秒數,而不是 我們北京時間UTC+8;所以gmtime比localtime 小8小時。

 

 在大多數的UNIX系統中UNIX時間戳存儲為32位,這樣會引發2038年問題或Y2038。

早晚替換為64位。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM