web-dev-qa-db-ja.com

Linuxでどのタイムゾーンを確認するのですか?

現在Linuxにいるタイムゾーンを確認する方法はありますか?

128
Hussy Hussain

通常、TZ環境変数は何か役に立つことを教えてくれます。ただし、time_tと現地のタイムゾーン表現の間の変換には、mktime()localtime()などの関数を使用するのが最善です。つまり、自分で変換しようとしないでください

19
Greg Hewgill

コンソールから行った場合は、次のように入力してください。

date +%Z
238
Rasman

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

date +'%:z %Z'

出力例:

-05:00 EST
52
Paul Vargas

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

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

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

    一致するファイルを見つけるには - おそらくそれを行うより良い方法がありますが、それはうまくいきます。複数の試合があります。

24
Rup

Ubuntuの場合はこれを試してください。

$ cat /etc/timezone

出力例:

Asia/Kolkata

他のディストリビューションの場合参照: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux

9
Shankar

date %Zによって生成されるような短い形式ではなく、標準的なタイムゾーンを探しているかもしれません。 US/Easterntimedatectlを持つシステムでは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

残念ながら、timedatectlset-timezoneをコマンドとして受け取りますが、対応するget-timezoneはありません。次のように解釈してください。

# timedatectl status | grep "zone" | sed -e 's/^[ ]*Time zone: \(.*\) (.*)$/\1/g'`
US/Eastern
6
Raman
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0

だから私はMountain Timeにいます。上記の環境変数の使用方法やdateコマンドの出力方法に関するアドバイスは、使用方法によってはうまく機能することがあります。

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

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

1970年1月1日のUTC以降の秒数が符号付き32ビット整数として保存されている場合(Linux/Intelシステムの場合と同様)、2038年には時計が動作しなくなります。LinuxにはY2K固有の問題はありませんしかし、2038年問題があります。うまくいけば、私たち全員がそれまでに64ビットシステム上でLinuxを実行するようになるでしょう。 64ビット整数は私達の時計をおよそ292271百万年までかなりうまく動かせ続けるでしょう。

2
Sam

タイムゾーンには、地理位置情報を使用できます。

$ 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

2
Steven Penny

いくつかの解決策:

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

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

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

私のコンピュータはUTCにあります。

1
tika

日付とタイムゾーンを同時に表示できます。

date +'%d/%m/%Y  %H:%M:%S [%:z  %Z]'
0
Mohsen Abasi

TZまたはdate IS NOT RELIABLEを使用すると、デフォルトのシステムタイムゾーンではなく、ユーザーのタイムゾーンがわかります。

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

新しいLinuxには "timedatectl"があり、コマンドを実行したときに大量の情報が表示されます。

(サイドノードとして、古いシステムでハードコードされたタイムゾーンを使用している場合は、おそらく最新のタイムゾーンファイルをその上にコピーすることでうまくいくでしょう。変化するタイムゾーンを解決するために何度もしなければなりません古い機器で)。

0
TekOps

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

参考文献: この答えで

0
Tom Hale