ubuntu 10.04 – どのようにLinuxのタイムゾーンを確認するには?

linux ubuntu-10.04

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

残念ながら、timedatectlset-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
Time - ArchWiki

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 台で動作することを確認でき、最初に確認するには非常に良い変数です

timedatectlsedを使う

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 を起動するよりもはるかにパフォーマンスが高い。しかし、これは findmd5sum とのパイプを早期に切断してしまい、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


タイトルとURLをコピーしました