![根据时间戳设置系统时区](https://linux22.com/image/40940/%E6%A0%B9%E6%8D%AE%E6%97%B6%E9%97%B4%E6%88%B3%E8%AE%BE%E7%BD%AE%E7%B3%BB%E7%BB%9F%E6%97%B6%E5%8C%BA.png)
我想根据如下所示的字符串设置系统日期和时区(Javascript 的输出new Date().toString()
):
Fri Aug 01 2014 12:13:27 GMT+0200 (CEST)
在 Debian 系统上设置时区的标准方法是从 运行或tzselect
符号链接区域文件。在这两种情况下,我都需要知道按大陆/城市划分的时区。/usr/share/zoneinfo
/etc/localtime
有没有一种简单的方法可以仅根据 GMT 偏移量设置时区?
答案1
该日期字符串中通常没有足够的信息来了解它是在哪个时区生成的。唯一+0200
告诉您有问题的时区是现在比 UTC 早两个小时。它不会告诉您偏移量是全年变化还是逐年变化,就像了解实际时区会告诉您的那样。至于这CEST
部分,那些短时区名称并不意味着是唯一的(几个不同的时区可能都称自己为CEST
)。
正如您在评论中指出的那样,您可以使用该字符串来猜测Etc/*
始终与 UTC 保持固定偏移的时区之一,但仅此而已。而且,并非所有可能的偏移量都以Etc/*
时区的形式存在,例如尼泊尔的 +0545。
由于您还在评论中指出您仅需要针对特定应用程序,因此也许您可能有兴趣仅针对当前进程(您的应用程序的进程)更改时区使用 TZ 环境变量?使用它你可以设置时区线:
TZ=CEST-2
您引用的日期字符串中包含了执行此操作所需的一切。 (注意偏移量上的相反符号。)