嵌入式linux 时区的设置?

时间:2022-03-31 01:44:42
由于历史原因,我需要将我的机器设置为美国山地时间(MST7MDT),在此之前的设备有uclibc,只需要配置支持读取/etc/TZ文件后,设备的时间信息即可统一,现在一个新的linux系统,没有找到支持/etc/TZ的配置选项,按照网上的说法,我在PC段copy了usr/share/zoneinfo目录下的时区文件MST7MDT到目标板目录,并将其重命名为/etc/localtime,

这时所有设置之间的事件的时间信息都能统一转换,不在是相差6个小时,但是,我在设备界面实现手动调时后,所有设备的时间也都统一转换,也执行了hwclock,但一上电重启后,时间又被改了6小时,具体操作是这样的:

上电内核打印信息:
rtc-rs5c372 3-0032: setting system clock to 2012-08-06 10:20:29 UTC (1344248429)
/ # date
Mon Aug  6 04:20:53 MDT 2012

在界面调整时间后,或使用命令date -s 10:21:00,并hwclock -w后,
在date查看
/ # date
Mon Aug  6 10:21:17 MDT 2012 (时间也是对的,时区是MDT)

重新断电重启后,
rtc-rs5c372 3-0032: setting system clock to 2012-08-06 10:25:00 UTC (1344248700) (这个是什么时间????)
/ # date 
Mon Aug  6 04:25:23 MDT 2012(为什么又04点,时区也是MDT啊)


不知道这问题出现在哪里,

在终端执行hwclock -r和date查看时间后,显示如下
/ # hwclock -r
Mon Aug  6 10:46:36 2012  0.000000 seconds
/ # date
Mon Aug  6 04:46:56 MDT 2012
/ # 
什么硬件时间和本地时间差一个时区,

5 个解决方案

#1


或者说date写入的本地时间??

date -s 11:50:00 设置本地时间
hwclock -w 写入时钟芯片,实际上写入的是本地时间

hwclock -r 查看硬件时间 
Mon Aug  6 11:50:09 2012  0.000000 seconds 硬件时间为本地时间
/ # date
Mon Aug  6 11:50:32 MDT 2012 本地时间为MDT时区


断电重启---》
rtc-rs5c372 3-0032: setting system clock to 2012-08-06 11:51:14 UTC (1344253874)
显示的为硬件时间,即上次写入的时间信息

/ # date
Mon Aug  6 05:52:03 MDT 2012 显示本地时间
/ # hwclock -r
Mon Aug  6 11:52:14 2012  0.000000 seconds 显示硬件时间

我认为系统开机后,认为rtc里面的时间为utc时间,设置系统时间后,在读取localtime信息转换成本地时间,但是在写入rtc时,date写入的是本地时间,这样在上电重启后,认为rtc的时间为utc时间则会进行时区转换,实际上rtc中的时间已经是本地时间,这个问题应该怎样解决

1.如何让写入的时间为utc时间
2.如何让系统支持/etc/TZ文件

#2


应该和RTC有关吧

#3


你的根文件系统基于busybox做的还是lfs做的
buxybox的话我也没有经验
你可以google busybox localtime 看看老外解决没

#4


引用 3 楼  的回复:
你的根文件系统基于busybox做的还是lfs做的
buxybox的话我也没有经验
你可以google busybox localtime 看看老外解决没


是busybox做的,较早的系统是MST7MDT时区,支持/etc/TZ文件,是uclibc解析的,现在的没有支持这个文件(或者我没有找到),可以使用/etc/localtime配置时区文件,这个我已经做好了,但是现在又有个新问题,以前的系统较老,时区转换是4月的第一个周日和10月的最后一个周日,但是2007年美国又通过修订了能源法案,将时区拉长了,变成3月的第二个周日,和11月的一个周日,我在pc端(FC14)复制的zoneinfo下的MST7MDT的文件全部是按照新法案的,最后google发现墨西哥还是4月开始,在pc端测试后,发现使用American/Mazatlan这个时区文件是可以的,4月进10月出,但是我感觉支持不是很好,哪位大哥有较早版本的发行版本下的时区文件啊,我估计FedoraCore1下的MST7MDT应该是可以的?

可以在PC端查看时区文件信息
zdump -v MST7MDT | grep 2012 会显示进入夏令制和退出夏令制的日期
MST7MDT  Sun Mar 11 08:59:59 2012 UTC = Sun Mar 11 01:59:59 2012 MST isdst=0 gmtoff=-25200
MST7MDT  Sun Mar 11 09:00:00 2012 UTC = Sun Mar 11 03:00:00 2012 MDT isdst=1 gmtoff=-21600
MST7MDT  Sun Nov  4 07:59:59 2012 UTC = Sun Nov  4 01:59:59 2012 MDT isdst=1 gmtoff=-21600
MST7MDT  Sun Nov  4 08:00:00 2012 UTC = Sun Nov  4 01:00:00 2012 MST isdst=0 gmtoff=-25200

很明显是3月进11月出,谁有老的MST7MDT发给我下,谢谢
zdump -v MST7MDT可以显示每一年的时区信息
而zdum -v Mazatlan只显示了1902和2038年的信息,还有警告,所以想找个老的MST7MDT文件

#5


复制了一个FedoraCore4下的MST7MDT到FC14下,zdump查看,是按照旧标准的时间,但是把它设置成该时间后,发现不起作用,好像解析不了?

#1


或者说date写入的本地时间??

date -s 11:50:00 设置本地时间
hwclock -w 写入时钟芯片,实际上写入的是本地时间

hwclock -r 查看硬件时间 
Mon Aug  6 11:50:09 2012  0.000000 seconds 硬件时间为本地时间
/ # date
Mon Aug  6 11:50:32 MDT 2012 本地时间为MDT时区


断电重启---》
rtc-rs5c372 3-0032: setting system clock to 2012-08-06 11:51:14 UTC (1344253874)
显示的为硬件时间,即上次写入的时间信息

/ # date
Mon Aug  6 05:52:03 MDT 2012 显示本地时间
/ # hwclock -r
Mon Aug  6 11:52:14 2012  0.000000 seconds 显示硬件时间

我认为系统开机后,认为rtc里面的时间为utc时间,设置系统时间后,在读取localtime信息转换成本地时间,但是在写入rtc时,date写入的是本地时间,这样在上电重启后,认为rtc的时间为utc时间则会进行时区转换,实际上rtc中的时间已经是本地时间,这个问题应该怎样解决

1.如何让写入的时间为utc时间
2.如何让系统支持/etc/TZ文件

#2


应该和RTC有关吧

#3


你的根文件系统基于busybox做的还是lfs做的
buxybox的话我也没有经验
你可以google busybox localtime 看看老外解决没

#4


引用 3 楼  的回复:
你的根文件系统基于busybox做的还是lfs做的
buxybox的话我也没有经验
你可以google busybox localtime 看看老外解决没


是busybox做的,较早的系统是MST7MDT时区,支持/etc/TZ文件,是uclibc解析的,现在的没有支持这个文件(或者我没有找到),可以使用/etc/localtime配置时区文件,这个我已经做好了,但是现在又有个新问题,以前的系统较老,时区转换是4月的第一个周日和10月的最后一个周日,但是2007年美国又通过修订了能源法案,将时区拉长了,变成3月的第二个周日,和11月的一个周日,我在pc端(FC14)复制的zoneinfo下的MST7MDT的文件全部是按照新法案的,最后google发现墨西哥还是4月开始,在pc端测试后,发现使用American/Mazatlan这个时区文件是可以的,4月进10月出,但是我感觉支持不是很好,哪位大哥有较早版本的发行版本下的时区文件啊,我估计FedoraCore1下的MST7MDT应该是可以的?

可以在PC端查看时区文件信息
zdump -v MST7MDT | grep 2012 会显示进入夏令制和退出夏令制的日期
MST7MDT  Sun Mar 11 08:59:59 2012 UTC = Sun Mar 11 01:59:59 2012 MST isdst=0 gmtoff=-25200
MST7MDT  Sun Mar 11 09:00:00 2012 UTC = Sun Mar 11 03:00:00 2012 MDT isdst=1 gmtoff=-21600
MST7MDT  Sun Nov  4 07:59:59 2012 UTC = Sun Nov  4 01:59:59 2012 MDT isdst=1 gmtoff=-21600
MST7MDT  Sun Nov  4 08:00:00 2012 UTC = Sun Nov  4 01:00:00 2012 MST isdst=0 gmtoff=-25200

很明显是3月进11月出,谁有老的MST7MDT发给我下,谢谢
zdump -v MST7MDT可以显示每一年的时区信息
而zdum -v Mazatlan只显示了1902和2038年的信息,还有警告,所以想找个老的MST7MDT文件

#5


复制了一个FedoraCore4下的MST7MDT到FC14下,zdump查看,是按照旧标准的时间,但是把它设置成该时间后,发现不起作用,好像解析不了?