タイムゾーンを数値化したい場合:
date +'%:z %Z'
サンプル出力:
-05:00 EST
私は代わりに “米国/東洋 "または "ヨーロッパ/ロンドン "の形でタイムゾーンを見つけたかった。これは以下の場所で見つけることができます:
ZONE="US/Eastern"
として /etc/sysconfig/clock 通常、環境変数 TZ
は何か有用なことを教えてくれます。しかし、mktime()
とローカルタイムゾーン表現との間で変換するには、localtime()
やtime_t
のような関数を使うのがベストです。つまり、_自分で変換をしようとしないでください。
ubuntuでは、これを試してみてください:
$ cat /etc/timezone
サンプル出力:
Asia/Kolkata
他のディストロのための参照: https://unix.stackexchange.com/questions/110522/timezone-setting-in-linux
時々、date %Z
のように US/Eastern
が生成する短縮形ではなく、正規のタイムゾーンを探しているかもしれません。Fedora のような timedatectl
を持つシステムでは、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
タイムゾーンのために、あなたはgeolocationを使用することができます:
$ curl https://ipapi.co/timezone
America/Chicago
または:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
あなたは、日付とタイムゾーンを同時に表示することができます:
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
時々 [ timedatectl set-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
参考文献: この答え の中で。
デフォルトのシステムタイムゾーンではなく、ユーザのタイムゾーンを教えてくれるので、TZ や date を使用することは信頼性がありません。etc/timezone がない場合は、/etc/localtime を見てください。一般的には、これが「サーバの」タイムゾーンです。/etc/localtime はしばしば /usr/share/zoneinfo にあるタイムゾーンファイルへのシンボリックリンクになっています。この正しいタイムゾーンファイルへのパスは、地理情報も提供してくれます。
(サイドノードとして、もし古いハードコーディングされたタイムゾーンを使用している古いシステムを持っているなら、最新のタイムゾーンファイルをコピーしても問題ありません。私は古い機器のタイムゾーンの変更を解決するために何度もこれをしなければなりませんでした)。