web-dev-qa-db-ja.com

タイムゾーンをUTC-8に設定するにはどうすればよいですか

タイムゾーンをUTC-8に設定する必要がありますが、PSTまたはGMT-8に設定するオプションしか表示されません。 UTC-8として表示する方法はありますか?

RHEL6を実行しています。

$ date Sat Feb 23 01:41:41 UTC 2019

2
SpruceTips

このタイムゾーンをどこに設定するかについてはまだ述べていませんが、TZ環境変数で任意のゾーン名を作成できます。

$ TZ='<UTC-8>+8' date
Fri Feb 22 19:25:36 UTC-8 2019

+8は、POSIXが愚かなことに、 オフセットが後方にある必要がある (西に向かって増加する)であるためです。 <...>の部分は表示される名前であり、任意の1つの単語にすることができます。純粋にアルファベットの場合、山括弧は必要ありませんが、-8はそれらを必要とします。

$ TZ='<yesterday>24' date
Fri Feb 22 03:30:15 yesterday 2019
$ TZ='tomorrow-24' date
Sun Feb 24 03:30:26 tomorrow 2019

GUIまたはその他のゾーン選択ツールを使用している場合は、おそらく/usr/share/zoneinfoでシステムに含まれているゾーン定義を探しています。別のゾーンをそのリストに表示する場合は、適切なzoneinfoファイルを作成し、所定の場所にコピーする必要があります。 zic ツールは、zoneinfoファイルを テキスト形式 からコンパイルするために使用されます。これは比較的簡単です(特に、既存のゾーンを変更して名前を変更する場合)。 。

一部のシステム(Red Hatではないと思います)には、タイムゾーンを名前としてグローバルに設定するファイル/etc/timezoneがあり、その中でそのTZ変数形式を使用できます。他のシステムは/etc/localtimeのみを使用します。これは、通常、zoneinfoファイルの1つのコピーであるため、そこにも適切なファイルを作成する必要があります。

ユーザーごとまたはセッションごとのゾーンの場合、使用できるのは環境変数のみです。


ゾーンを「UTC-8」または特に定義されていない他のゾーンに設定した場合、 2つのものとして扱われます :最初に、ゾーンの名前( "UTC":何でも)アルファベット文字列があります)、2番目にPOSIX方向のオフセット(そこにある数字は何でも)。つまり、TZ=UTC-8 dateは次のようなものを出力します

Sat Feb 23 11:50:01 UTC 2019

-つまり、中国または西オーストラリアの時刻を報告し、ゾーンは「UTC」と呼ばれると考えています。この動作は、タイプミスをしたときに追跡するのが非常に混乱し、煩わしいものです。質問に含めた出力の原因かもしれませんが、わかりません。

これは、従来のほとんど廃止されたPOSIXタイムゾーン形式RST6RDT5,M10.3.0/00:00:00,M2.4.0/00:00:00として解析されています。これには、標準時間と夏時間のオプションの名前とオフセット、および2つの間の切り替えの日付が含まれます。このアプローチには、重要なゾーンには多くの欠点があり、ゾーンファイルのように定義の履歴変更を追跡しません。


「正しい」方法は、PSTとして表示されるAmerica/Los_Angelesゾーンを使用するか、名前を使用できない場合や夏時間の変更を望まない場合はEtc/GMT +8を使用することです。 GMT + 8は、オフセットを「-08」として表示し、テキストラベルは付けません。おそらく正しいと思われることが十分ではない場合があり、その場合は上記のいずれかで問題ありません。

2
Michael Homer