Linux下时区问题——CST以及GMT

基本概念

一、时区

  1. UTC:(Universal Time/Temps Cordonné 世界标准时间)

  2. CMT: (Greenwich Mean Time)格林尼治时间,基本上等于UTC 时间

  3. CET:(Central European Time) 欧洲中部时间, 冬季时间为UTC+1, 夏季时间为UTC+2

  4. CST: 可同时代表4个时区

    Central Standard Time (USA) UT-6:00
    Central Standard Time (Australia) UT 9:30
    China Standard Time UT 8:00
    Cuba Standard Time UT-4:00
    

二、“系统时间”与“硬件时间”

系统时间: 一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。

硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。

1、系统时间

Liunx系统中两种时间: 一种是UTC, 另一种是本地时间,两者区别为时区不同。

查看本地时间:

date

查看UTC时间

date -u

查看时区时间

date -R

GMT和CST的转化
转化成GMT

cp /usr/share/zoneinfo/GMT /etc/localtime

将时间转化为CST

echo “Asia/shanghai” > /etc/timezone
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2、硬件时间

系统关闭时会同步系统时间到硬件时钟,系统启动时会从硬件时钟读取时间更新到系统。
若当前系统时间为CST(如+8),同步到硬件时钟后,下次系统启动时会跟根据时区再转化成(再+8)本地时间,会造成跟之前同步用的CST时间有额外的时区时间差;在以后的编程中为了避免错误,还是不要使用CST时间,而尽量采用GMT/UTC时间。

hwclock --utc
hwclock --localtime
hwclock -w #Set hardware clock from system time

如下为设置linux时间参考代码,主要应用于GPS、北斗或者上位机同步时间源。

//将00-99的整数存放成1个字节的BCD
unsigned char UcharToBCD(unsigned char data)
{
	unsigned char b, bcd;
	bcd = 0;
	b = data / 10;
	b = b << 4;
	bcd |= b;
	b = data % 10;
	bcd |= b;
	return bcd;
}

//功能:利用BCD时间设置Linux时间
//参数:
//	bcdtime, 6字节当前bcd时间
//返回:
//	true:	成功
//	false:	失败
bool C_set_linux_time(unsigned char *bcdtime)
{
	struct timeval linux_time;
	struct tm sys_time;
	time_t t;
    struct timeval stime;
    struct timezone tz;
	memset(&sys_time, 0, sizeof(tm));
	sys_time.tm_year = BCDToUchar(bcdtime[0]) + 2000 -1900;
	sys_time.tm_mon = BCDToUchar(bcdtime[1]) - 1;
	sys_time.tm_mday = BCDToUchar(bcdtime[2]);
	sys_time.tm_hour = BCDToUchar(bcdtime[3]);
	sys_time.tm_min = BCDToUchar(bcdtime[4]);
	sys_time.tm_sec = BCDToUchar(bcdtime[5]);

	t = mktime(&sys_time);

    if(gettimeofday(&stime,&tz) == 0)
    {
    	linux_time.tv_usec = 0;
    	linux_time.tv_sec = t;
    	if  (settimeofday(&linux_time, &tz) == -1)
        {
    		return false;
    	}
    	else
    	{
    		return true;
    	}
    }
    return false;
}
  • 参考文献:
    [1]: https://blog.csdn.net/jhc23/article/details/80987727
    [2]: http://abcdxyzk.github.io/blog/2016/01/06/system-base-time/
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值