Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18673412
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-26 22:08:10

system-config-date的实现机制

 

转载时请注明出处:http://blog.csdn.net/absurd

 

前几天我们要开发一个时间(时区)设置的应用程序,所以花了一点时间去看config-date的实现,这里简单说一下config-date的工作机制和我们面临的一些问题。

 

1.         让时间生效分为两步,这是在dateBackend.py里实现的。首先调用date命令设置系统时间,然后调用hwclock命令把时间写到BIOS中。

 

2.         设置时区也分为两步,这是在timezoneBackend.py里实现的。首先把时区数据文件(/usr/share/zoneinfo/时区)拷贝到文件/etc/localtime,然后把时区信息写入到文件/etc/sysconfig/clock。中间还有一步是把时区数据文件拷贝到文件/var/spool/postfix/etc/localtime,这一步是可选的,取决于该文件是否存在,一般系统上/var/spool/postfix/etc/localtime都不存在,具体用途不清楚。

 

3.         时区列表数据是从文件/usr/share/zoneinfo/zone.tab中读取的。该文件记录了主要城市的时区信息,每一行描述一个城市:城市所在的国家、经/纬度和对应的时区数据文件等等。

 

4.         glibc的代码来看,localtimetzset两个函数只使用了/etc/localtime文件,该文件是一个二进制文件,结构有点复杂,没看得太明白。

 

我们遇到两个问题:

1.         /usr/share/zoneinfo/zone.tab文件太大,有400多行,手机上屏幕比较小,用户很难找到想要的时区。解决办法:对它进行裁减,主要保留主要城市。

 

2.         /usr/share/zoneinfo/zone.tab里记录的是城市精确的经/纬度,通过该经/纬度计算出来的偏移时间是小数,这倒不是大问题,取整就行了。问题是像上海和重庆这两个城市,我们希望得到同样8小时的时间偏移,这不可能根据经/纬度计算。时区数据文件中是有相关信息的,因为localtime这样的函数都可以正常工作。但是该文件的结构有点复杂,没搞明白。解决办法:自己定义了一张表记录这些信息,或者在选择时区时,时间不做同步更新。

 

不知大家遇到过同样的问题没有,是否有更好的办法呢?

 

~~end~~

 

阅读(522) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~