1. 程式人生 > >獲取時區方法(C語言實現)

獲取時區方法(C語言實現)

本文首先普及一下時區以及各種時間的含義。 如果不需普及直接跳到最後的程式碼,為獲取時區的C語言程式碼。
時區
        咱們一起回憶一下中學的地理知識,地球是自西向東自傳逆時針自傳,自西向東逆時針公轉。所以陽光總是自東向西掃過,也就是我們常說的太陽東昇西落。
        地球自傳一週的弧度是360度,時間是24小時,所以人類在西元1884年的國際會議上制定了全球性的標準時,明定以英國倫敦格林威治這個地方為零度經線的起點(亦稱為本初子午線),並以地球由西向東每24小時自轉一週360°,訂定每隔經度15°,時差1小時。而每15°的經線則稱為該時區的中央經線。和0度經線對著的180度的經線也被稱為換日線,因為自西向東越過此線時,日期需要加一日。(這一個換日線在中國的中學地理裡演變出了各種萬惡的計算題)         以本初子午線為界,往西順次稱為西一區直至西十二區,向東為東一區至東12區。中國雖然跨越多個時區,統一使用北京所在的東八區作為中國的標準時間。
GMT  (Greenwich Mean Time)  格林威治時間
        即本初子午線的時間,一般作為全球時間的基準參考時間。據說是以格林威治天文臺命名的。(誰讓那時候人家國家牛呢,要是中國製定規則的話沒準就以中國時間為準了。)
UTC (Universal Time Coordinated) 世界標準時間或世界協調時間
        協調世界時是以原子時秒長為基礎,在時刻上儘量接近於世界時的一種時間計量系統。UTC時間和GMT時間其實是同一個時間,只不過UTC時間的單位是秒。定期會進行校準,校準的方式是釋出閏秒,即有兩個同樣的秒。記住,UTC是GMT的以秒為單位的計時。
CST (China Standard Time) 中國標準時間
        即咱們新聞聯播那個嘟嘟嘟的時間。也就是東八區的時間。當GMT為0點的時候,我們已經8點了。我們的時間需要在GMT的時間上加八個小時(這可是中學地理題哦,呵呵呵)
獲取時區的程式碼
        下面是獲取時區的程式碼,根據時區即可換算GMT時間到本地時間。
/**
 * @file tt_time.c
 * @brief 
 * @author cjx
 * @version 
 * @date 2013-04-17
 */		
#include <stdio.h>
#include <time.h>

int main(int argc,char *argv[])
{
    time_t time_utc;
    struct tm tm_local;

    // Get the UTC time
    time(&time_utc);

    // Get the local time
    // Use localtime_r for threads safe
    localtime_r(&time_utc, &tm_local);

    time_t time_local;
    struct tm tm_gmt;

    // Change tm to time_t 
    time_local = mktime(&tm_local);

    // Change it to GMT tm
    gmtime_r(&time_utc, &tm_gmt);

    int time_zone = tm_local.tm_hour - tm_gmt.tm_hour;
    if (time_zone < -12) {
        time_zone += 24; 
    } else if (time_zone > 12) {
        time_zone -= 24;
    }

    char cur_time[256];
    strftime (cur_time,256, " %B %A %Y年%m月%d日  %H時%M分%S秒   %c  %x %X", &tm_local);
    printf("LOCAL TIME  :%s\n", cur_time);

    strftime(cur_time,256, " %B %A %Y年%m月%d日  %H時%M分%S秒   %c  %x %X", &tm_gmt);
    printf("GMT TIME    :%s\n", cur_time);

    printf("Your time zone is +%d. (- is west, + is east)\n", time_zone);

    return 0;
}

出道中學地理題檢測一下(題目源自網路) 當世界標準時間為2006年1月1日4點時,全球已是2005年的範圍大約是   A.全球一半的地區   B.全球三分之一的地區   C.全球大於四分之三的地區   D.全球多於一半的地區
答案是: B 哦~