您的位置:首页 > 运维架构 > Linux

修改Linux系统时间

2016-08-22 16:11 85 查看
  在做嵌入式Linux开发时,我们经常会发现系统时间与我们的实际时间不一样。以我所在的东八区为例,产品中Linux显示时间晚于本地时间8小时。这是因为嵌入式Linux系统并没有像桌面Linux系统那样完整的系统设置功能,而直接使用UTC时间。我们输入 date 命令,可以看到:

# date
Mon Aug 22 10:45:57 UTC 2016


  显然,这是由于时区设置的问题造成的。在给出修改方法之前,先介绍时区的概念以及计算机系统中常用的时间概念。

全球24个时区的划分

相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟这24个时区是如何产生的?过去世界各地原本各自订定当地时间,但随着交通和电讯的发达,各地交流日益频繁,不同的地方时间,造成许多困扰,于是在西元1884年的国际会议上制定了全球性的标准时,明定以英国伦敦格林威治这个地方为零度经线的起点(亦称为本初子午线),并以地球由西向东每24小时自转一周360°,订定每隔经度15°,时差1小时。而每15°的经线则称为该时区的中央经线,将全球划分为24个时区,其中包含23个整时区及180°经线左右两侧的2个半时区。就全球的时间来看,东经的时间比西经要早,也就是如果格林威治时间是中午12时,则中央经线15°E的时区为下午1时,中央经线30°E时区的时间为下午2时;反之,中央经线15°W的时区时间为上午11时,中央经线30°W时区的时间为上午10时。以台湾为例,台湾位于东经121°,换算后与格林威治就有8小时的时差。如果两人同时从格林威治的0°各往东、西方前进,当他们在经线180°时,就会相差24小时,所以经线180°被定为国际换日线,由西向东通过此线时日期要减去一日,反之,若由东向西则要增加一日。

格林威治标准时间 GMT

十七世纪,格林威治皇家天文台为了海上霸权的扩张计画而进行天体观测。1675年旧皇家观测所(Old Royal Observatory) 正式成立,到了1884年决定以通过格林威治的子午线作为划分地球东西两半球的经度零度。观测所门口墙上有一个标志24小时的时钟,显示当下的时间,对全球而言,这里所设定的时间是世界时间参考点,全球都以格林威治的时间作为标准来设定时间,这就是我们耳熟能详的「格林威治标准时间」(Greenwich Mean Time,简称G.M.T.)的由来,标示在手表上,则代表此表具有两地时间功能,也就是同时可以显示原居地和另一个国度的时间。

世界协调时间 UTC

多数的两地时间表都以GMT来表示,但也有些两地时间表上看不到GMT字样,出现的反而是UTC这3个英文字母,究竟何谓UTC?事实上,UTC指的是Coordinated Universal Time- 世界协调时间(又称世界标准时间、世界统一时间),是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准,不过对于现行表款来说,GMT与UTC的功能与精确度是没有差别的。

夏日节约时间 DST

所谓「夏日节约时间」Daylight Saving Time(简称D.S.T.),是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用,在英国则称为夏令时间(Summer Time)。这个构想于1784年由美国班杰明·富兰克林提出来,1915年德国成为第一个正式实施夏令日光节约时间的国家,以削减灯光照明和耗电开支。自此以后,全球以欧洲和北美为主的约70个国家都引用这个做法。目前被划分成两个时区的印度也正在商讨是否全国该统一实行夏令日光节约时间。欧洲手机上也有很多GSM系统的基地台,除了会传送当地时间外也包括夏令日光节约时间,做为手机的时间标准,使用者可以自行决定要开启或关闭。值得注意的是,某些国家有实施「夏日节约时间」的制度,出国时别忘了跟随当地习惯在表上调整一下,这可是机械表没有的功能设计哦!

CST 时间

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

可见,CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间。

  看完上面的介绍,相信大家就明白了,我们要做的就是把默认的 UTC 时间修改为 CST (UT+8) 时间。

步骤一:

  在 /usr/share/zoneinfo/ 目录下找到相应的时区文件,我们需要的是 Asia/ 目录下的 Shanghai 时区文件。(如果你的嵌入式Linux系统没有这些时区文件,那就从你的桌面Linux系统中复制过来吧。)

步骤二:

  将 Shanghai 时区文件复制到 /etc/localtime,或者创建软链接
# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
。(如果你的嵌入式Linux系统没有 localtime 文件,那就直接把上面的得到的时区文件 Shanghai 复制为 /etc/localtime 吧。)

步骤三:

  修改 /etc/sysconfig/clock 文件,内容如下:

ZONE="Asia/Shanghai"
UTC=false
ARC=false


(如果没有这个文件,那就新建一个呗。)

步骤四:

  把时间写到 CMOS,命令为:
# hwclock -w
# clock -w
。(主要看你的嵌入式Linux系统有哪个命令,一般来说,两个命令的作用是一样的,只不过 clock 命令支持的平台更广。)

步骤五:

  如果Linux系统显示的时间还没有显示正确,重启一下吧。

  好了,检查一下:

# date
Mon Aug 22 18:56:04 CST 2016
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: