从终端设置时区

use*_*009 220 timezone

我想从终端更改系统时钟的时区。

这可以用

tzselect
Run Code Online (Sandbox Code Playgroud)

“在终端打开一个gui”

或者

sudo cp /usr/share/zoneinfo/Europe/London /etc/localtime
Run Code Online (Sandbox Code Playgroud)

“这将设置为格林威治标准时间”

但是有没有办法用偏移即-1或+5等设置时区?

我需要这样做,因为我正在编写一个应用程序来调整时间偏移或报告日志,我拥有的唯一信息是用户 IP。我可以使用 webapp 来查找 IP 的位置,但是我需要设置偏移量,如果我可以得到位置的偏移量,这将很容易,但是如果我需要找到区域和城市,那将是一个真正的痛苦.

如果有人知道如何使用 +/- 小时设置系统时钟的答案会很棒。

Mit*_*tch 336

要从终端更改时区,只需按键盘上的Ctrl+ Alt+T即可打开终端。当它打开时,运行以下命令:

sudo dpkg-reconfigure tzdata
Run Code Online (Sandbox Code Playgroud)

打开后,只需按照屏幕更改时区即可。

  • 这将不起作用,因为我需要在没有用户输入的情况下从程序中更改时区 我需要一个命令我可以输入终端而不是 gui 解决方案 感谢回复 (14认同)

Col*_*son 178

timedatectl14.04也可以用new来设置时间。

sudo timedatectl set-timezone America/New_York
Run Code Online (Sandbox Code Playgroud)

  • 要查看所有可用选项,您可以运行 `ls -R --group-directories-first /usr/share/zoneinfo`。*(注意不要在此处修改或删除任何文件。)* 有关 `posix` 和 `right` 前缀的更多信息在 [此处](https://mm.icann.org/pipermail/tz/2012-January/017422 .html)。 (7认同)
  • 对 UTC 使用 `sudo timedatectl set-timezone Etc/UTC`。 (3认同)

Cla*_*kes 22

我意识到这个线程有点过时,但我一直在寻找更好的解决方案,因为我需要在用户从我们的网站下载并部署虚拟机后自动设置时区。这是我的结果:

echo "Setting TimeZone..."
export tz=`wget -qO - http://geoip.ubuntu.com/lookup | sed -n -e 's/.*<TimeZone>\(.*\)<\/TimeZone>.*/\1/p'` &&  timedatectl set-timezone $tz
export tz=`timedatectl status| grep Timezone | awk '{print $2}'`
echo "TimeZone set to $tz"
Run Code Online (Sandbox Code Playgroud)

一旦它在新网络上启动,这将从服务器查询 geoip.ubuntu.com(我的脚本首先检查连接性),然后根据响应设置服务器的时区。

“wget -q0 -”告诉 wget 只将结果输出到 stdout,然后通过管道传输到 $tz 变量。

希望它可以帮助某人!


Ry-*_*Ry- 21

您可以使用 .gmt± x文件/usr/share/zoneinfo/Etc

sudo ln -fs /usr/share/zoneinfo/Etc/GMT$offset /etc/localtime
Run Code Online (Sandbox Code Playgroud)

  • minitech 忘记了 force 标志,我猜是这样 -&gt; sudo ln -sf .... (9认同)

Ser*_*nyy 14

TL;DR /etc/localtime是一个符号链接,指向/usr/share/zoneinfo/Continent/City. 通过改变它指向的位置,你可以改变你的时区。

要更改时区,请删除/etc/localtime符号链接并将符号链接分配到您想要的城市。例如,ls -l /etc/localtime报告此文件指向/usr/share/zoneinfo/America/Denver. 把它改成纽约,我做

  1. sudo rm /etc/localtime
  2. sudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime
  3. 等一下我的时钟更新

下面的屏幕截图显示了来自的步骤和确认 timedatectl

在此处输入图片说明


Ric*_*777 12

更新时区的简单方法是使用sudo dpkg-reconfigure tzdata. 但这不是那么容易编写脚本的。

如果您想通过脚本显式设置时区(例如用于设置 VM),这里有一个方法:

为您想要的时区设置一个变量,例如其中之一

tz=Europe/London
tz=America/Anchorage
tz=Etc/GMT+6
Run Code Online (Sandbox Code Playgroud)

有效值为/usr/share/zoneinfo.

然后简单地

sudo cp -vf /usr/share/zoneinfo/$tz /etc/localtime
echo $tz | sudo tee /etc/timezone
Run Code Online (Sandbox Code Playgroud)

注意两者/etc/localtime/etc/timezone必须一致。

可能现在重新启动以更新所有服务(例如 cron)。


小智 5

这是我使用的方法,它以美国为中心,因为我不需要担心非美国时区。

如果我需要确定当前时区,我要么这样做:

cat /etc/timezone  
Run Code Online (Sandbox Code Playgroud)

或者

sudo hwclock --show  
Run Code Online (Sandbox Code Playgroud)

然后我做:

timedatectl set-timezone <_designation_>
Run Code Online (Sandbox Code Playgroud)

其中<_designation_>是下列之一:

美国/美国东部/
美国中部/
美国山地
/太平洋
美国/阿拉斯加
美国/阿留申美国
/亚利桑那
美国/东印第安纳
美国/夏威夷
美国/印第安纳-斯塔克
美国/密歇根
美国/太平洋-新
美国/萨摩亚

例如:

timedatectl set-timezone US/Eastern  
Run Code Online (Sandbox Code Playgroud)

其他时区名称可以在这里找到:https : //en.wikipedia.org/wiki/List_of_tz_database_time_zones