您的位置:首页 > 编程语言 > C语言/C++

获取时区方法(C语言实现)

2013-04-17 16:37 363 查看
本文首先普及一下时区以及各种时间的含义。
如果不需普及直接跳到最后的代码,为获取时区的C语言代码。
时区
咱们一起回忆一下中学的地理知识,地球是自西向东自传逆时针自传,自西向东逆时针公转。所以阳光总是自东向西扫过,也就是我们常说的太阳东升西落。





[align=left] 地球自传一周的弧度是360度,时间是24小时,所以人类在西元1884年的国际会议上制定了全球性的标准时,明定以英国伦敦格林威治这个地方为零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°,订定每隔经度15°,时差1小时。而每15°的经线则称为该时区的中央经线。和0度经线对着的180度的经线也被称为换日线,因为自西向东越过此线时,日期需要加一日。(这一个换日线在中国的中学地理里演变出了各种万恶的计算题)[/align]
[align=left] 以本初子午线为界,往西顺次称为西一区直至西十二区,向东为东一区至东12区。中国虽然跨越多个时区,统一使用北京所在的东八区作为中国的标准时间。[/align]
GMT (Greenwich Mean Time) 格林威治时间
[align=left] 即本初子午线的时间,一般作为全球时间的基准参考时间。据说是以格林威治天文台命名的。(谁让那时候人家国家牛呢,要是中国制定规则的话没准就以中国时间为准了。)[/align]
UTC (Universal Time Coordinated) 世界标准时间或世界协调时间
[align=left] 协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。UTC时间和GMT时间其实是同一个时间,只不过UTC时间的单位是秒。定期会进行校准,校准的方式是发布闰秒,即有两个同样的秒。记住,UTC是GMT的以秒为单位的计时。[/align]
CST (China Standard Time) 中国标准时间
[align=left] 即咱们新闻联播那个嘟嘟嘟的时间。也就是东八区的时间。当GMT为0点的时候,我们已经8点了。我们的时间需要在GMT的时间上加八个小时(这可是中学地理题哦,呵呵呵)[/align]
获取时区的代码
[align=left] 下面是获取时区的代码,根据时区即可换算GMT时间到本地时间。[/align]
/**
* @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;
}


出道中学地理题检测一下(题目源自网络)

[align=left]当世界标准时间为2006年1月1日4点时,全球已是2005年的范围大约是 [/align]
A.全球一半的地区 B.全球三分之一的地区 C.全球大于四分之三的地区 D.全球多于一半的地区

[align=left]答案是: B 哦~ [/align]
[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: