Answers:
我发现更易于使用的工具是dpkg-reconfigure
。使用:
sudo dpkg-reconfigure tzdata
您将获得多种选择,包括中没有的选择tzselect
。
对于OP来说,这可能有点晚了,而对于到达这里的其他搜索者来说,则更适合。
如果您需要非交互式解决方案,请尝试使用dpkg-reconfigure tzdata和debconf-set-selections更改时区来尝试此解决方案
echo "Europe/Zurich" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata
您可以通过在/ usr / share / zoneinfo中浏览来确定时区。实际上,上面的dpkg-reconfigure命令将适当的文件从那里复制到/ etc / localtime。我过去通常只是手动执行此操作,而且看起来工作正常。
如果长时间运行的流程不接受更改,请不要感到惊讶。例如Apache日志时间戳记。考虑这是否重要,因此考虑是否需要重新启动正在运行的进程甚至重新启动。
/etc/localtime
尚不存在的要求。如果存在,并且是的软链接/usr/share/zoneinfo/whatever
,则将其作为基础,并进行/etc/localtime
相应的更新,覆盖您的更改。
要在最新的Debian和Ubuntu版本(Stretch / Xenial等)上以非交互方式对其进行编辑,则还需要删除/etc/localtime
它,否则/etc/timezone
将被覆盖。
echo 'Europe/Zurich' > /etc/timezone
rm /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
该答案基于mc0e的答案。我无法用我的声誉添加评论。
TL; DR
echo "TZ=Etc/UTC" >> /etc/environment
tzconfig
Etc/UTC
您发现使用的首选时区在哪里tzselect
?
较长的版本
使用时
dpkg-reconfigure tzdata
重新启动后不会保留时区信息。您可以使用
diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`
如果您仅更新/etc/timezone
,更新将与不一致/etc/localtime
,因此最好执行
tzconfig
使用tzselect
找出哪个时区确实存在(或简单地浏览/usr/share/zoneinfo
目录)。
在POSIX系统中,TZ
应优先于/etc/localtime
:
export TZ='Europe/Berlin'
$ date
Tue Apr 10 08:51:03 CEST 2018
export TZ='Pacific/Efate'
$ date
Tue Apr 10 18:28:33 +11 2018
直接使用TZ
可以节省许多系统调用,因为某些程序每次询问当前日期时,与日期/时间相关的常用功能都必须访问文件系统。这是一个微优化,但非常简单。
TZ
在配置文件中积极导出会创建符号链接吗?根据我的经验,这听起来根本不对。也许您的意思是“还要确保创建符号链接...”?
$TZ
变量是通过glibc
函数读取的:gnu.org/software/libc/manual/html_node/TZ-Variable.html
echo "TZ=Etc/UTC" >> /etc/environment
吗?您缺少TZ=
部分...(如果有人仍在运行古老的Debian版本)。此外,守护程序之类的非交互性内容仍将使用/etc/localtime
版本而不是其中的一个版本TZ
...