我想从终端更改系统时钟的时区。
这可以用
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)
打开后,只需按照屏幕更改时区即可。
Col*_*son 178
timedatectl14.04也可以用new来设置时间。
sudo timedatectl set-timezone America/New_York
Run Code Online (Sandbox Code Playgroud)
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)
Ser*_*nyy 14
TL;DR /etc/localtime是一个符号链接,指向/usr/share/zoneinfo/Continent/City. 通过改变它指向的位置,你可以改变你的时区。
要更改时区,请删除/etc/localtime符号链接并将符号链接分配到您想要的城市。例如,ls -l /etc/localtime报告此文件指向/usr/share/zoneinfo/America/Denver. 把它改成纽约,我做
sudo rm /etc/localtimesudo ln -s /usr/share/zoneinfo/America/New_York /etc/localtime下面的屏幕截图显示了来自的步骤和确认 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