我真的需要你的帮助来完成使用 Linux 操作系统在路由器上设置时区和时间的工作从网络远程 (基于 Linux 内核 2.6.30 的 Linux 操作系统)。
为了完成这项工作,我使用 CGI 和 Shellscript。以下是步骤:
- 从浏览器获取时间、时区信息
- 执行CGI设置时间(使用C)
- CGI执行Timezone_Setting shell脚本
以下是我在步骤 3 中对脚本所做的操作:
参数($1)是以下字符串(A)之一:
“GMT-12”,“GMT-11”,“GMT-10”,...“GMT”,“GMT+1”,..“GMT +12”。
看来我可以使用以下内容来设置时区:
ln -sf /usr/share/zoneinfo/Japan /etc/localtime
问题:
1)我的做法正确吗?
2) 如何正确使用上面的命令和我的 A 字符串?
注意:在上面的命令中,“Japan”是我的“/usr/share/zoneinfo”目录中的文件之一。我可以在使用命令之前进行转换,例如:
"GMT-9" <-> Japan
"GMT-5" <-> EST
( etc. )
但这似乎不是一个好的解决方案。
答案1
如何设置时区取决于路由器使用的 C 库。和glibc是非嵌入式 Linux 系统上使用的 C 库,是指向 下文件或其副本的/etc/localtime
符号链接。/usr/share/zoneinfo
和uClibc(我的家庭路由器使用的),时区信息位于/etc/TZ
并存储为TZ
环境变量规范(见下文)。检查您的路由器使用哪种方法。如果您的路由器使用 Glibc,那么您的方法看起来是正确的。
GMT+9
并且Japan
是不同的时区。GMT+9
表示始终比 GMT 早 9 小时的时区。Japan
意味着无论在日本什么时间,夏令时以及日本过去和未来的任何时区变化。哦,还有GMT-9
错误的方式。
如果您只需要在特定程序中设置时区,请使用TZ
环境变量设置为时区名称或规范。例如,大多数西欧国家当前 DST 规则的时区规范如下所示:
TZ=CET-1CEST,M3.5.0/2,M10.5.0/3
表示时区称为CET
,对应于 UTC+1(即 CET - 1 = UTC),时区为 CEST(默认 +1 小时偏移),介于 3 月最后一个星期日凌晨 2 点和 10 月最后一个星期日凌晨 3 点之间。对于简单的全年偏移,您可以使用类似的设置
TZ='<GMT+9>-9'