Linux 中使用 shellscript 进行时区、时间设置

Linux 中使用 shellscript 进行时区、时间设置

我真的需要你的帮助来完成使用 Linux 操作系统在路由器上设置时区和时间的工作从网络远程 (基于 Linux 内核 2.6.30 的 Linux 操作系统)。
为了完成这项工作,我使用 CGI 和 Shellscript。以下是步骤:

  1. 从浏览器获取时间、时区信息
  2. 执行CGI设置时间(使用C)
  3. 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/zoneinfouClibc(我的家庭路由器使用的),时区信息位于/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'

相关内容