获取时区方法(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 哦~ 
 
 

猜你喜欢

转载自blog.csdn.net/irwin_chen/article/details/8814676