現在FreeBSDに設定されているデフォルトのタイムゾーンを確認する

現在FreeBSDに設定されているデフォルトのタイムゾーンを確認する

sudo tzsetupFreeBSDでタイムゾーン設定を変更するように求められます。

➥変更せずに現在のタイムゾーン設定を表示するにはどうすればよいですか?

date現在時刻が表示されることがわかります。たとえば、

2018年12月9日日曜日05:45:25 UTC

...現在のデフォルトのタイムゾーンはUTCであるとします。

しかし、この場合:

2018年12月8日土曜日21:52:04 PST

これはPST実際のタイムゾーンではありません。この2〜4文字のコードは標準化されていませんし、固有ではありません。リアルタイムタイムゾーンはまたはContinent/Region形式です(参照:Europe/AfricaAfrica/Tunisウィキペディア)。

基本設定のリアルタイムタイムゾーンをどのように確認できますか?

この投稿環境変数の使用について言及しましたTZ

export TZ=America/Los_Angeles

しかし、私のFreeBSD 11.2システムにはそのような変数セットはありません。それで、その人はドライバーではないかと疑われます。

ベストアンサー1

TLDRの答えは次のとおりです。

$ POSIXTZ=$(tail -n1 /etc/localtime)
$ echo $POSIXTZ
CET-1CEST,M3.5.0,M10.5.0/3

$ TZNAME=$(find /usr/share/zoneinfo | while read fname; do cmp -s /etc/localtime "$fname" && echo "$fname" | cut -c 21- ; done)
$ echo $TZNAME
Europe/Copenhagen

現在のタイムゾーンはファイルに保存されます/etc/localtime。 @Kusalanandaが言ったように、これはシンボリックリンクかもしれません。ただし、@JdeBPが暗示したように、FreeBSDではこのファイルは通常インストール/usr/share/zoneinfo中にコピーされます。

このファイルはテキスト記述から派生します。貢献/tzdata

次に、この情報を使用してバイナリ形式にコンパイルします。ジック形式は次のように指定されます。tzファイル

このファイルを直接解析できる組み込みユーティリティがあるかどうかわかりません。しかし、現在の文書によると、Cで書くのは簡単です。ボックスからの内容をそのままにするには、を使用して表示できますhexdump

hexdump -v -C /etc/localtime

またはマジックマーカーだけを見たい場合は、次のようにします。

$ hexdump -v -s 0 -n 5 -e '1/5 "%s\n"' /etc/localtime
TZif2

またはフィールド:

tzh_ttisgmtcnt  The number  of UTC/local indicators stored in the file.
tzh_ttisstdcnt  The number  of standard/wall indicators stored in the file.
tzh_leapcnt     The number  of leap seconds for which data is stored in the file.
tzh_timecnt     The number  of ``transition times'' for which data is stored in the file.
tzh_typecnt     The number  of ``local time types'' for which data is stored in the file (must not be zero).
tzh_charcnt     The number  of characters of ``time zone abbreviation strings'' stored in the file.

使用:

hexdump -v -s 19 -n 4 -e '"tzh_ttisgmtcnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 23 -n 4 -e '"tzh_ttisstdcnt: " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 27 -n 4 -e '"tzh_leapcnt:    " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 31 -n 4 -e '"tzh_timecnt:    " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 35 -n 4 -e '"tzh_typecnt:    " 1/4 "%9u\n"' /etc/localtime
hexdump -v -s 39 -n 4 -e '"tzh_charcnt:    " 1/4 "%9u\n"' /etc/localtime

私の出来事の結果:

tzh_ttisgmtcnt:         0
tzh_ttisstdcnt:         6
tzh_leapcnt:            6
tzh_timecnt:            0
tzh_typecnt:          133
tzh_charcnt:            6

ttinfo次に、最初の位置が始まる場所を見つけるために、次の数学を実行します。

43 + (tzh_timecnt * 4) + (tzh_timecnt * 1)
43 + (0 * 4) + (0 * 1) = 43

ホイールがゆっくり落ちます。

$ hexdump -v -s 43 -n 6 -e '"ttinfo:\n tt_gmtoff:      " 1/4 "%9u\n tt_isdst:       " 1/1 "%1d\n tt_abbrind:     " 1/1 "%1u\n"' /etc/localtime
ttinfo:
 tt_gmtoff:      2350816009
 tt_isdst:       96
 tt_abbrind:     155

この数字により少しずれる場合があります。これはまさにマゾヒズム的アプローチだ。だから金をほとんど見つけたときに止まった。tt_abbrind

ところで底を見るとtzファイル一般的に、私たちは次のような小さな塊を見つけました。

2番目のヘッダーとデータの後には、ファイルに保存された最後の変換時間以降の瞬間を処理する改行で囲まれたPOSIX-TZ環境変数スタイル文字列が続きます(POSIX表現なし、コンテンツ間の改行なし)。

だから簡単です。

$ tail -n1 /etc/localtime
CET-1CEST,M3.5.0,M10.5.0/

詳しく見ると、/etc/localtime設定Continent/Regionが含まれていないことがわかります!ただし、ファイルがコピーされたら、/usr/share/zoneinfoそれらを比較して可能なファイルを見つけることができます。重複したコンテンツが含まれていることを確認するにはまだ十分ではありません/usr/share/zoneinfo。しかし、私にとってはこれがうまくいきます:

$ find /usr/share/zoneinfo | while read fname; do cmp -s /etc/localtime "$fname" && echo "$fname" | cut -c 21- ; done
Europe/Copenhagen

すべてのファイルを繰り返して/usr/share/zoneinfo比較します/etc/localtime。パラメーターcmpを使用すると、-s何も表示されず、値のみが表示されます。値が0の場合、名前を印刷します。名前を印刷するときは、cut最初の21文字を削除して名前を取得します。Continent/Region

おすすめ記事