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...