#1 楼
通常,环境变量TZ
会告诉您一些有用的信息。但是,最好使用mktime()
和localtime()
之类的函数在time_t
和本地时区表示之间进行转换。也就是说,请勿尝试自己进行转换。#2 楼
如果您是从控制台说的话,只需输入:date +%Z
评论
好点...改变了答案
–拉斯曼
2014年6月19日15:44
要从Ubuntu中的命令行设置时区,以下链接提供了简单的1行命令:askubuntu.com/a/524362/182454
–丹·尼森鲍姆(Dan Nissenbaum)
16 Dec 15'在6:30
这给我+07。要在基于Debian / Arch的Linux上获得Region / City,请参见此答案。
–汤姆·黑尔
18年6月26日在6:55
#3 楼
如果需要数字时区:date +'%:z %Z'
样本输出:
-05:00 EST
评论
在OS X上,输出为:z EST
–嫌疑犯
15年2月13日在17:01
如果用于linux。
– Paul Vargas
15年2月13日在17:18
更确切地说,这适用于GNU日期。在我的情况下,BusyBox版本打印出一些毫无意义的东西,“%:z CEST”。
–林é
15年6月3日在18:42
但是,date +%z在OS X上可以正常工作。建议您修改答案。
–尼尔·梅休(Neil Mayhew)
15年8月14日在17:22
嗨,@NeilMayhew谢谢!嗯...但是这个问题有标签linux ubuntu-10.04
– Paul Vargas
15年8月14日在17:29
#4 楼
我想以“美国/东部”或“欧洲/伦敦”的形式找到时区。您可以在以下位置找到它:/ etc / timezone(在Ubuntu和Red Hat上存在?但在Amazon Linux上不存在)
(在Red Hat风格系统上)作为
ZONE="US/Eastern"
在/ etc / sysconfig / clock ,或者您可以尝试将/ etc / localtime与/ usr / share / zoneinfo下的文件之一匹配;令人讨厌的是,这似乎不是符号链接,但是您可以例如
cd / usr / share / zoneinfo
查找* -type f -exec sh -c“ diff -q / etc / localtime'{}'> / dev / null && echo {}“ \;
查找匹配的文件-可能有更好的方法,但是可以用。将有多个匹配项。
评论
找到/ usr / share / zoneinfo / -type f | xargs md5sum | grep $(md5sum / etc / localtime | cut -d''-f1)
–freiheit
16年7月4日在18:25
#5 楼
对于ubuntu,请尝试以下方法:$ cat /etc/timezone
样本输出:
Asia/Kolkata
其他发行版参考:https:/ /unix.stackexchange.com/questions/110522/timezone-setting-in-linux
评论
有时timedatectl set-timezone不会更新/ etc / timezone。请参阅此答案以获取基于/ etc / localtime的解决方案。
–汤姆·黑尔
18年6月26日在6:56
#6 楼
有时,您可能会寻找规范的时区,而不是date %Z
例如US/Eastern
。在带有timedatectl
的系统上Fedora timedatectl
输出许多有用的信息,包括当前区域:# timedatectl
Local time: Tue 2016-09-13 17:10:26 EDT
Universal time: Tue 2016-09-13 21:10:26 UTC
RTC time: Tue 2016-09-13 21:10:26
Time zone: US/Eastern (EDT, -0400)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
不幸的是,
timedatectl
将set-timezone
作为命令,但是没有相应的get-timezone
。解析如下:# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$//g'`
US/Eastern
#7 楼
对于时区,可以使用地理位置:$ curl https://ipapi.co/timezone
America/Chicago
或:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
http:// wiki.archlinux.org/index.php/time#Time_zone
评论
只是要指出,尽管这可能会返回服务器所在的正确时区,但不一定返回服务器配置的时区。
– Art Geigel
20年9月3日,12:11
#8 楼
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0
所以我在山区时间。
尽管上面有关使用环境变量或仅使用date命令输出的建议有时效果更好,这取决于您要使用的方式。
#9 楼
/ etc / sysconfig / clock设置将硬件时钟存储为UTC还是本地时间。
将/ etc / localtime链接到/ usr / share / zoneinfo / ...以设置时区。
/>键入
/sbin/hwclock --systohc [--utc]
设置硬件时钟。Linux内核始终存储并计算时间,以自1970年1月1日午夜以来的秒数为单位,而不管您的硬件时钟是否存储为UTC。或不。转换为本地时间是在运行时完成的。一件很整洁的事情是,如果有人使用其他时区的计算机,他们可以设置TZ环境变量,并且所有日期和时间都将显示为其时区正确。
如果秒数自1970年1月1日UTC被存储为一个有符号的32位整数(在您的Linux / Intel系统上)以来,您的时钟将在2038年的某个时候停止工作。Linux没有内在的Y2K问题,但确实存在2038年的问题。希望届时我们都能在64位系统上运行Linux。 64位整数将使我们的时钟运行良好,直到大约29.271亿年前。
#10 楼
我有Linux Mint Cinnamon。timedatectl
提供了我所需的信息: Local time: Mon 2020-06-29 11:04:27 PDT
Universal time: Mon 2020-06-29 18:04:27 UTC
RTC time: Mon 2020-06-29 18:04:27
Time zone: America/Vancouver (PDT, -0700)
System clock synchronized: yes
systemd-timesyncd.service有效:是
本地TZ中的RTC:否
#11 楼
几个解决方案:date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone
(分别)给我:
UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC
我的计算机位于UTC上。
#12 楼
使用TZ或日期不可靠,因为它会告诉您用户的时区,而不是默认的系统时区。默认的系统时区存储在/ etc / timezone中(通常是到时区的符号链接)特定于时区的数据文件)。如果没有/ etc / timezone,请查看/ etc / localtime。通常,这就是“服务器”的时区。 / etc / localtime通常是/ usr / share / zoneinfo中的时区文件的符号链接。正确的时区文件路径通常也会为您提供地理信息。
较新的linux具有“ timedatectl”,当运行命令时,它将为您提供大量信息。
(作为副节点,如果您有一个仍使用OLD硬编码时区的古老系统,则可能可以将一个现代时区文件复制到该文件上并且它可以工作。我不得不这样做很多次才能解决更改时区问题在较旧的设备上)。
#13 楼
有时timedatectl set-timezone
不会更新/etc/timezone
,因此最好从符号链接/etc/timezone
指向的文件名中获取tiemzone:#!/bin/bash
set -euo pipefail
if filename=$(readlink /etc/localtime); then
# /etc/localtime is a symlink as expected
timezone=${filename#*zoneinfo/}
if [[ $timezone = "$filename" || ! $timezone =~ ^[^/]+/[^/]+$ ]]; then
# not pointing to expected location or not Region/City
>&2 echo "$filename points to an unexpected location"
exit 1
fi
echo "$timezone"
else # compare files by contents
# https://stackoverflow.com/questions/12521114/getting-the-canonical-time-zone-name-in-shell-script#comment88637393_12523283
find /usr/share/zoneinfo -type f ! -regex ".*/Etc/.*" -exec \
cmp -s {} /etc/localtime \; -print | sed -e 's@.*/zoneinfo/@@' | head -n1
fi
参考文献:在此答案中。
#14 楼
您可以同时显示日期和时区:date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
#15 楼
以下所有解决方案都将为您提供IANA兼容的Olson时区ID(例如America/Los_Angeles
)。但是,有些变量可能最后会返回额外的空格。使用环境
环境变量
TZ
包含*时区。如果您担心要在应用程序和用户之间建立协议,则最好进行检查。$ echo $TZ
我可以亲自确认这至少可以在我的两台现代Linux计算机上运行,并且非常适合首先要检查的好变量。
使用
timedatectl
和sed
改进了拉曼的答案,但没有无用的使用grep。与许多现代Linux发行版一样,此解决方案是使用SystemD的系统的最佳选择。
$ timedatectl | sed -n 's/^\s*Time zone: \(.*\) (.*//p'
使用
/etc/timezone
这是一个简单易读的文件,但似乎不可用在更多发行版上。 IIRC,这是那些Debian开发者不久前提出的想法。
$ cat /etc/timezone
使用GNU
realpath
,因为/etc/localtime
是一个符号链接如果您知道
/etc/localtime
,则此解决方案是最佳的是一个符号链接,许多旧版软件和指南都可以完成,甚至现代SystemD都可以实现。并且您还具有可用的GNU realpath,在每个GNU OS发行版中也应该可用。$ realpath --relative-to /usr/share/zoneinfo /etc/localtime
哦!
/etc/localtime
不是符号链接;使用find
,sed
,md5sum
如果发现自己使用非符号链接
/etc/localtime
,则可以尝试在本地时区数据库中找到其md5匹配项。这可能会返回多个匹配项,因为Olson数据库中有很多别名。$ find /usr/share/zoneinfo -type f -exec md5sum {} + |\
sed /$(printf $(md5sum /etc/localtime))/'!d;s/.\{54\}//;/^posix/d'
如果您只想返回一个时区ID(取决于一个Chourst熵决定),则可以在第一个匹配项之后使用sed的
q
命令退出。例如,这比启动head
的性能要好得多。但是,这会导致find
早点断开与md5sum
的管道,导致打印到fd 2时出错。您可以通过将其管道传输到/ dev / null来忽略此错误,如下所示:$ find /usr/share/zoneinfo -type f -exec md5sum {} + 2> /dev/null |\
sed /$(printf $(md5sum /etc/localtime))/'!d;s/.\{54\}//;/^posix/d;q'
使用
curl
和地理位置如果由于某种原因您不希望或不信任主机的配置,但是您确定主机可以连接到更广阔的世界,则有几种免费的在线服务可以为您定位(当它们持续时)。下面是一些示例:
$ curl -Lsf https://ipapi.co/timezone
$ curl -Lsf http://ip-api.com/line?fields=timezone
$ curl -Lsf https://ipwhois.app/line/?objects=timezone
前两个服务从史蒂文·彭妮的答案中被无耻地窃取了。
评论
是否有任何命令可以告知用户所在的时区?
–胡西·侯赛因
2011年7月11日下午5:00
当然,日期会告诉您。
– Greg Hewgill
2011年7月11日下午5:01
我有两个服务器实例,如果我在两个服务器上都给出“ date”命令,则显示不同的时间。两台服务器的时区均为IST,一台服务器的时间为:IST 2011年7月11日星期一10:39:31和其他服务器IST 2011年7月11日星期一10:35:31时区..相差4分钟
–胡西·侯赛因
2011年7月11日下午5:06
在精确的穿山甲上,$ TZ对我没有任何回报。
–伊恩·塞缪尔·麦克莱恩·艾尔德(Iain Samuel McLean Elder)
13-10-5在19:48
@GregHewgill您的回答在第一眼没有帮助。请考虑编辑您的答案。请参阅下面投票最多的答案。我暂时不赞成你的回答。另外,我的机器上默认没有TZ env。
–therealmarv
16年6月21日在15:52