扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
前几天我们要开发一个时间(时区)设置的应用程序,所以花了一点时间去看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的代码来看,localtime和tzset两个函数只使用了/etc/localtime文件,该文件是一个二进制文件,结构有点复杂,没看得太明白。
我们遇到两个问题:
1. /usr/share/zoneinfo/zone.tab文件太大,有400多行,手机上屏幕比较小,用户很难找到想要的时区。解决办法:对它进行裁减,主要保留主要城市。
2. /usr/share/zoneinfo/zone.tab里记录的是城市精确的经/纬度,通过该经/纬度计算出来的偏移时间是小数,这倒不是大问题,取整就行了。问题是像上海和重庆这两个城市,我们希望得到同样8小时的时间偏移,这不可能根据经/纬度计算。时区数据文件中是有相关信息的,因为localtime这样的函数都可以正常工作。但是该文件的结构有点复杂,没搞明白。解决办法:自己定义了一张表记录这些信息,或者在选择时区时,时间不做同步更新。
不知大家遇到过同样的问题没有,是否有更好的办法呢?
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者