Linuxのどのタイムゾーンを確認するには?


回答:


19

通常、TZ環境変数は有用な情報を提供します。ただし、mktime()やなどの関数を使用して、ローカルタイムゾーン表現とのlocaltime()time_tで変換することをお勧めします。つまり、自分で変換しようとしないでください


2
ユーザーがいるタイムゾーンを伝えるコマンドはありますか?

26
確かに、date教えてくれます。
グレッグヒューギル

serverの2つのインスタンスがあり、両方のサーバーで「date」コマンドを指定すると、異なる時間が表示されます。両方のサーバーのタイムゾーンはIST、1台のサーバーの時間:月7月11日10:39:31 IST 2011および他のサーバー月7月11 10:35:31 IST 2011 .. 4分の差があります

8
Precise Pangolinでは、echo $TZ何も返されません。
イアンサミュエルマクリーン長老

3
@GregHewgillあなたの答えは、最初のビューでは役に立ちません。回答を編集してください。以下の最も投票された回答を参照してください。とりあえず、あなたの答えを下げます。また、私のマシンにはデフォルトでTZ環境がありません。
therealmarv

244

コンソールから意味する場合は、次のように入力します。

date +%Z

2
良い、うまくいく。
シルバームーン

15
これは受け入れられた答えである必要があります
カレンギ14年

良い点...その効果への答えを変更
ラスマン14年

また、Ubuntuのコマンドラインからタイムゾーンを設定するために、次のリンクで簡単な1行のコマンドを提供しています。askubuntu.com
Dan

これは+07私に与えます。Region/CityDebian / ArchベースのLinuxに乗るには、この回答をご覧ください。
トム・ヘイル

54

数値のタイムゾーンが必要な場合:

date +'%:z %Z'

サンプル出力:

-05:00 EST

7
OS Xでは、これが出力されます:z EST
容疑者

7
これはLinuxの場合です。
ポールバルガス

1
より正確には、これはGNUに適用されますdate。BusyBoxバージョンは、私の場合は「%:z CEST」という意味のないものを出力します。
レオラム

ただし、日付+%zはOS Xでは正常に機能します。答えを変更することをお勧めします。
ニールメイヒュー

1
こんにちは、@ NeilMayhewありがとう!うーん...しかし、質問にはタグがありますlinux ubuntu-10.04
ポールバルガス

24

代わりに、「US / Eastern」または「Europe / London」形式でタイムゾーンを見つけたいと思いました。これは次の場所にあります。

  • / etc / timezone(UbuntuおよびRed Hatに存在しますが、Amazon Linuxには存在しません)
  • (Red Hatスタイルのシステムの場合)ZONE="US/Eastern"/ etc / sysconfig / clock
  • または、/ etc / localtimeを/ usr / share / zoneinfoの下にあるファイルの1つに一致させることもできます。迷惑なことに、これはシンボリックリンクではないようですが、たとえば

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

    一致するファイルを見つけるには、おそらくもっと良い方法がありますが、それは機能します。複数の一致があります。


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


6

時には、正規のタイムゾーンではなくによって生成されるような短い形式を探している可能性がありdate %Z例えばUS/EasterntimedatectlFedoraなどのシステムで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

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

だから私は山岳部の時間です。上記の環境変数または日付コマンドの出力の使用に関するアドバイスは、それをどのように使用したいかに応じて、より適切に機能する場合があります。



2
  • / etc / sysconfig / clockは、ハードウェアクロックをUTCとして保存するかローカル時間として保存するかを設定します。
  • / etc / localtimeを/ usr / share / zoneinfo / ...にシンボリックリンクして、タイムゾーンを設定します。
  • 入力/sbin/hwclock --systohc [--utc]して、ハードウェアクロックを設定します。

Linuxカーネルは、ハードウェアクロックがUTCとして保存されているかどうかに関係なく、1970年1月1日の午前0時からの秒数として常に時間を保存および計算します。現地時間への変換は実行時に行われます。これに関する1つのすてきなことは、誰かが別のタイムゾーンからコンピューターを使用している場合、TZ環境変数を設定でき、すべての日付と時刻がそのタイムゾーンに対して正しいように見えることです。

UTC(1970年1月1日)からの秒数が符号付き32ビット整数として保存されている場合(Linux / Intelシステムの場合)、2038年にクロックが停止します。Linuxには固有のY2K問題はありません、しかし2038年問題があります。それまでに64ビットシステムでLinuxを実行できることを願っています。64ビット整数は、およそ292271百万年まで、時計の動作を維持します。


1

いくつかのソリューション:

date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone

(それぞれ)私に与えた:

UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC

私のコンピューターはUTCです。


0

TZまたは日付を使用すると、デフォルトのシステムタイムゾーンではなく、ユーザーのタイムゾーンが通知されるため、信頼できません。

デフォルトのシステムタイムゾーンは/ etc / timezone(多くの場合、タイムゾーンに固有のタイムゾーンデータファイルへのシンボリックリンクです)に保存されます。/ etc / timezoneがない場合は、/ etc / localtimeを見てください。通常、これは「サーバー」のタイムゾーンです。/ etc / localtimeは、多くの場合、/ usr / share / zoneinfo内のタイムゾーンファイルへのシンボリックリンクです。正しいタイムゾーンファイルへのパスは、多くの場合、地理情報も提供します。

新しいLinuxには、コマンドの実行時に大量の情報を提供する「timedatectl」があります。

(サイドノードとして、古いハードコーディングされたタイムゾーンをまだ使用している古代のシステムがある場合は、おそらく現代のタイムゾーンファイルをその上にコピーすることができ、それは機能します。古い機器で)。


0

時々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

参照:この回答では


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.