題 如何檢查Linux中的哪個時區?


有沒有辦法檢查我目前在Linux上的哪個時區?


120
2017-07-11 04:57


起源




答案:


通常, TZ 環境變量會告訴你一些有用的東西。但是,最好使用諸如此類的功能 mktime() 和 localtime() 之間進行轉換 time_t 和當地時區代表。那是, 不要試圖自己做轉換


18
2017-07-11 04:59



是否有任何Command告訴用戶所在的時區?
當然, date 會告訴你的。 - Greg Hewgill
我有兩個服務器實例,如果我在兩個服務器中給出“日期”命令它顯示不同的時間。兩個服務器的時區是IST,一台服務器的時間:Mon Jul 11​​ 10:39:31 IST 2011和其他服務器Mon Jul 11​​ 10:35:31 IST 2011 ..有4分鐘的差異
論精確穿山甲 echo $TZ 什麼都不給我回報。 - Iain Samuel McLean Elder
@GregHewgill你的回答在第一次觀看時沒用。請考慮編輯你的答案。請參閱下面最常見的答案。我現在會拒絕你的答案。我的機器上默認沒有TZ環境。 - therealmarv


如果你的意思是從控制台,只需鍵入:

date +%Z

234
2017-07-11 05:01



好,效果很好。 - Silver Moon
這應該是公認的答案 - KalenGi
好點......改變了這個效果的答案 - Rasman
要從Ubuntu中的命令行設置時區,以下鏈接提供了一個簡單的1行命令: askubuntu.com/a/524362/182454 - Dan Nissenbaum
這給了 +07 為了我。要得到 Region/City 在基於Debian / Arch的Linux上,請參閱 這個答案。 - Tom Hale


如果你想要數字時區:

date +'%:z %Z'

樣本輸出:

-05:00 EST

50
2018-02-13 16:22



在OS X上輸出 :z EST - suspectus
這個如果 Linux的。 - Paul Vargas
更確切地說,這適用於GNU date。 BusyBox版本在我的案例中打印出非感性的東西,“%:z CEST”。 - Léo Lam
但是,日期+%z在OS X上運行正常。我建議您修改答案。 - Neil Mayhew
嗨,@ NeilMayhew謝謝!嗯......但問題有標籤 linux  ubuntu-10.04 - Paul Vargas


我希望找到“美國/東方”或“歐洲/倫敦”形式的時區。你可以在這裡找到:

  • / etc / timezone(出現在Ubuntu和Red Hat上?但不是例如Amazon Linux)
  • (在Red Hat風格的系統上)為 ZONE="US/Eastern" 在/ etc / sysconfig / clock中
  • 或者您可以嘗試將/ etc / localtime與/ usr / share / zoneinfo下的其中一個文件進行匹配;令人討厭的是,這​​似乎不是符號鏈接,但你可以例如

    cd / usr / share / zoneinfo
      find * -type f -exec sh -c“diff -q / etc / localtime'{}'> / dev / null && echo {}”\;

    找到匹配的文件 - 可能有更好的方法,但這是有效的。會有多場比賽。


23
2017-08-31 09:58



find /usr/share/zoneinfo/ -type f| xargs md5sum | grep $(md5sum /etc/localtime | cut -d' ' -f1) - freiheit


對於ubuntu試試這個:

$ cat /etc/timezone

樣本輸出:

Asia/Kolkata

對於其他發行版參考: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux


8
2018-05-10 10:50



有時 timedatectl set-timezone 沒有更新 /etc/timezone。看到 這個答案 基於的解決方案 /etc/localtime。 - Tom Hale


有時您可能正在尋找規範的時區而不是由此產生的簡短形式 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: \(.*\) (.*)$/\1/g'`
US/Eastern

5
2017-09-13 21:16





$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

所以我在山地時間。 雖然上面關於使用環境變量或只是日期命令輸出的建議有時會更好,取決於您希望如何使用它。


4
2017-07-22 04:58





  • / etc / sysconfig / clock設置硬件時鐘是以UTC還是本地時間存儲。
  • Symlink / etc / localtime到/ usr / share / zoneinfo / ...設置你的時區。
  • 類型 /sbin/hwclock --systohc [--utc] 設置硬件時鐘。

無論您的硬件時鐘是否存儲為UTC,Linux內核始終將時間存儲和計算為自1970年1月1日午夜以來的秒數。轉換到當地時間是在運行時完成的。關於這一點的一個巧妙之處是,如果某人正在使用來自不同時區的計算機,他們可以設置TZ環境變量,並且所有日期和時間對於他們的時區都是正確的。

如果自1970年1月1日UTC以來的秒數被存儲為帶符號的32位整數(就像在Linux / Intel系統上那樣),那麼你的時鐘將在2038年的某個時候停止工作.Linux沒有固有的Y2K問題,但確實有2038年的問題。希望到那時我們都將在64位系統上運行Linux。 64位整數將使我們的時鐘運行良好,直到大約2922.71萬年。


2
2017-07-11 05:01