Linuxで現在どのタイムゾーンにいるかを確認する方法はありますか?
147 None 2011-07-11
通常、環境変数 TZ
は何か有用なことを教えてくれます。しかし、mktime()
やlocaltime()
のような関数を使って、time_t
とローカルタイムゾーン表現の間で変換するのがベストです。つまり、自分で変換をしようとしないでください
24 Greg Hewgill 2011-07-11
コンソールからという意味ならば、タイプすればいい
date +%Z
270 Rasman 2011-07-11
タイムゾーンを数字で表示したい場合
date +'%:z %Z'
Sample output:
-05:00 EST
64 Paul Vargas 2015-02-13
タイムゾーンを代わりに「アメリカ/東洋」か「ヨーロッパ/ロンドン」の形で探して欲しかったのですが、「アメリカ/東洋」と「ヨーロッパ/ロンドン」のどちらの形になっているのでしょうか?で見つけることができます
- /etc/timezone (UbuntuやRed Hatには存在するが、Amazon Linuxなどには存在しない)
- (Red Hat スタイルのシステムでは) /etc/sysconfig/clock の
ZONE="US/Eastern"
のようにします または /etc/localtime を /usr/share/zoneinfo 以下のファイルにマッチさせることができます
cd /usr/share/zoneinfo find * -type f -exec sh -c “diff -q /etc/localtime ‘{}’ > /dev/null & & echo {}”\;
を使って一致するファイルを見つける – もっと良い方法があると思いますが、これはうまくいきます。複数のマッチがあるでしょう
26 Rup 2013-08-31
ubuntuの場合は、これを試してみてください
$ cat /etc/timezone
サンプル出力
Asia/Kolkata
その他のディストロについては、https://unix.stackexchange.com/questions/110522/timezone-setting-in-linuxを参照してください
14 Shankar 2016-05-10
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
9 Raman 2016-09-13
$ strings /etc/localtime | tail -n 1
MST7MDT,M3.2.0,M11.1.0
ということで、私はマウンテンタイムにしています。環境変数の使用や日付コマンドの出力についての上記のアドバイスは、あなたがそれをどのように使用したいかに応じて、時々より良い動作をしますが
4 Tagar 2015-07-22
時間帯については、ジオロケーションを使用することができます
$ curl https://ipapi.co/timezone
America/Chicago
Or:
$ curl http://ip-api.com/line?fields=timezone
America/Chicago
4 Steven Penny 2018-07-01
- /etc/sysconfig/clock は、ハードウェアクロックを UTC またはローカルタイムのどちらで保存するかを設定します
- etc/localtime を /usr/share/zoneinfo/… にリンクしてタイムゾーンを設定します
- ハードウェアクロックを設定するには、
/sbin/hwclock --systohc [--utc]
と入力してください
Linux カーネルは、ハードウェアの時計が UTC で保存されているかどうかに関わらず、1970 年 1 月 1 日の真夜中からの秒数を常に保存し、計算します。ローカル時間への変換は実行時に行われます。これについての一つの良い点は、誰かが異なるタイムゾーンからコンピュータを使用している場合、環境変数TZを設定することで、すべての日付と時刻がそのタイムゾーンに合わせて正しく表示されるということです
1970年1月1日のUTCからの秒数が符号付き32ビット整数として保存されている場合(Linux/Intelシステムではそうです)、あなたの時計は2038年のある日に動作を停止します。Linux には Y2K の問題はありませんが、2038 年問題があります。うまくいけば、それまでには64ビットシステムでLinuxを実行していることを願っています。64ビット整数は、およそ2億9,271万年まで、私たちのクロックをうまく動かし続けることができるでしょう
2 None 2011-07-11
私は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 active: yes RTC in local TZ: no
2 Web Dev guy 2020-06-29
いくつかの解決策があります
date +"%Z %z"
timedatectl | grep "Time zone"
cat /etc/timezone
が私に(それぞれ)くれました
UTC +0000
Time zone: Etc/UTC (UTC, +0000)
Etc/UTC
私のパソコンはUTCです
1 tika 2018-04-16
TZや日付を使用することは信頼性がありません。なぜなら、それはユーザのタイムゾーンを教えてくれるのであって、 デフォルトのシステム・タイムゾーンではないからです
デフォルトのシステムのタイムゾーンは /etc/timezone に格納されています (これはタイムゾーン固有のタイムゾーンデータファイルへのシンボリックリンクであることが多いです)。etc/timezone がない場合は、/etc/localtime を見てください。一般的には、これが「サーバの」タイムゾーンです。/etc/localtime はしばしば /usr/share/zoneinfo にあるタイムゾーンファイルへのシンボリックリンクになっています。正しいタイムゾーンファイルへのパスは、しばしば地理情報を提供してくれます
新しい linux には “timedatectl” があり、コマンド実行時に多くの情報を提供してくれます
(サイドノードとして、もしあなたが古いハードコードされたタイムゾーンをまだ使っている古いシステムを持っているならば、最新のタイムゾーンファイルをコピーすれば動作するでしょう。私は古い機器のタイムゾーンの変更を解決するために何度もこれをしなければなりませんでした)
0 TekOps 2017-11-15
timedatectl set-timezone
doesn’t update /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 2018-06-26
日付とタイムゾーンを同時に表示することができます
date +'%d/%m/%Y %H:%M:%S [%:z %Z]'
0 Mohsen Abasi 2018-08-05
以下のすべてのソリューションでは、IANA互換のオルソンタイムゾーンID (例: America/Los_Angeles
)が得られます。しかし、最後に余分な空白を返すものもあります
環境を利用すること
環境変数 TZ
にはタイムゾーンが含まれています。アプリケーションとユーザの間でプロトコルを確立することに関心がある場合は、これをチェックするのが最適です
$ echo $TZ
私は個人的に、これが私の最新の Linux コンピュータの少なくとも 2 台で動作することを確認でき、最初に確認するには非常に良い変数です
timedatectl
とsed
を使う
Raman の 回答 を改良したものですが、無駄な grep を使う必要はありません。この解決策は、多くの最新の Linux ディストリビューションがそうであるように、SystemD を利用しているシステムに最適です
$ timedatectl | sed -n 's/^\s*Time zone: \(.*\) (.*/\1/p'
Using /etc/timezone
これは簡単に読めるファイルですが、もう多くのディストロでは利用できないようです。私の記憶では、これはしばらく前に Debian の開発者たちが考え出したもので、人気がなくなったものです
$ cat /etc/timezone
/etc/localtime
はシンボリックリンクなので、GNU realpath
を使う
この解決策は、/etc/localtime
がシンボリックリンクであることを知っている場合に最適です。これは多くの古いソフトウェアやガイドが達成していることであり、現代のSystemDが約束していることでもあります
$ realpath --relative-to /usr/share/zoneinfo /etc/localtime
ドォォォォォォォォォォ!?/etc/localtime
はシンボリックリンクではなく、find
, sed
, md5sum
を使っています
もしあなたが非symlink /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
最初の2つのサービスは、スティーブン・ペニーの回答から恥知らずに盗んだ
0 BurninateSE 2020-09-29