獲取時區方法(C語言實現)
阿新 • • 發佈:2019-02-15
本文首先普及一下時區以及各種時間的含義。
如果不需普及直接跳到最後的程式碼,為獲取時區的C語言程式碼。
地球自傳一週的弧度是360度,時間是24小時,所以人類在西元1884年的國際會議上制定了全球性的標準時,明定以英國倫敦格林威治這個地方為零度經線的起點(亦稱為本初子午線),並以地球由西向東每24小時自轉一週360°,訂定每隔經度15°,時差1小時。而每15°的經線則稱為該時區的中央經線。和0度經線對著的180度的經線也被稱為換日線,因為自西向東越過此線時,日期需要加一日。(這一個換日線在中國的中學地理裡演變出了各種萬惡的計算題) 以本初子午線為界,往西順次稱為西一區直至西十二區,向東為東一區至東12區。中國雖然跨越多個時區,統一使用北京所在的東八區作為中國的標準時間。
即本初子午線的時間,一般作為全球時間的基準參考時間。據說是以格林威治天文臺命名的。(誰讓那時候人家國家牛呢,要是中國製定規則的話沒準就以中國時間為準了。)
下面是獲取時區的程式碼,根據時區即可換算GMT時間到本地時間。
出道中學地理題檢測一下(題目源自網路) 當世界標準時間為2006年1月1日4點時,全球已是2005年的範圍大約是 A.全球一半的地區 B.全球三分之一的地區 C.全球大於四分之三的地區 D.全球多於一半的地區
答案是: B 哦~
時區
咱們一起回憶一下中學的地理知識,地球是自西向東自傳逆時針自傳,自西向東逆時針公轉。所以陽光總是自東向西掃過,也就是我們常說的太陽東昇西落。地球自傳一週的弧度是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的時間上加八個小時(這可是中學地理題哦,呵呵呵)獲取時區的程式碼
/** * @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 哦~