私のシステム(DebianテストのGnome 3)は現在の時間を混同しています。実行してみるとdate
時間は正しく表示されますが、一部のアプリは1時間ずつ遅く出ますね。たとえば、Gnomeカレンダーにイベントを追加すると、カレンダーの予定に表示される予定の時間は、私が入力した時間から1時間を引いたものになります。
問題が見つかりましたが、解決策がわかりません。
$ date ; TZ=GMT date ; TZ=BST date
Sun 30 Apr 11:25:37 BST 2017
Sun 30 Apr 10:25:37 GMT 2017
Sun 30 Apr 10:25:37 BST 2017
出力の最初の2行は正確で、3行目は1時間遅れました。私が理解していないのは、なぜBSTタイムゾーンが1時間遅れているように見えますが、現在の時刻は正確でBSTを使用することです。
これも関連する可能性があります:
$ timedatectl status
Local time: Sun 2017-04-30 11:33:07 BST
Universal time: Sun 2017-04-30 10:33:07 UTC
RTC time: Sun 2017-04-30 10:33:07
Time zone: Europe/London (BST, +0100)
Network time on: yes
NTP synchronized: yes
RTC in local TZ: no
編集する zdump /etc/localtimeの出力:
$ zdump /etc/localtime
/etc/localtime Sun Apr 30 12:22:53 2017 BST
$ date ; TZ=GMT date ; TZ=BST date
Sun 30 Apr 12:22:53 BST 2017
Sun 30 Apr 11:22:53 GMT 2017
Sun 30 Apr 11:22:53 BST 2017
答え1
BST
タイムゾーン名として認識されません。出力では省略形として使用されますが、タイムゾーンを指定するために使用することはできません。ほとんどのプログラムはタイムゾーン名を解決せず、タイムゾーン名が認識されない場合はデフォルトでGMTに設定されます。
BST、CET、ESTなどの略語は常に明確に定義されておらず、時にはあいまいなこともあります(北米標準時ですか、オーストラリア東部標準時ですか?)。タイムゾーンの構成は一般的に世界中で使用されますが、特定の地域内でのみ意味があります。また、BSTなどの略語は、実際にはタイムゾーンを指定せず、タイムゾーン(夏時間が適用されるイギリス)の時間のみを指定します。したがって、ほとんどの場合、大陸/都市パターンに従う明確な名前を使用する必要があります。一般的なLinuxシステムでは、他の多くのUnixバリアントでもこれが本当だと思います。ディレクトリを見ると、どの略語が利用可能かを知ることができます/usr/share/zoneinfo
。
GMT
したがって、BST
冬と夏に使用する代わりにEurope/London
。
答え2
date
@Gillesが言ったように、BSTはユーザーにこれがイギリスの夏時間(GMT + 1)であることを知らせる出力でdate +%Z
あり、タイムゾーンを定義するものではありません$TZ
。
BSTは英国のユーザーにとって大きな意味があります。イギリスのユーザーは、これを見ると、14:00 BST
タイムスタンプがイギリス大陸の夏時間14時(13:00 UTCなど)を意味することがわかります。これらの3〜4文字のコードは、イギリス、アメリカ、およびその他の英語圏の国で広く使用されているため、これらの国(地域設定など)date
のデフォルト出力に表示されます。en_GB.UTF-8
一方、ほとんどのフランスのユーザーはそれが何を意味するのか14:00 CEST
分かりません。CEST
中央ヨーロッパ夏時間CET
、フランスの夏の場合はGMT + 2)、したがって日付がタイムゾーンを指定するとき/CEST
そこ(と同様)よりもUTCオフセットを含める方が良いことがわかりますmardi 2 mai 2017, 13:34:09 (UTC+0200)
。
この$TZ
変数には3〜4文字の文字コードは含まれていません。何かが入っています。定義/指定するタイムゾーン、エリア。これは、冬と夏の時間を切り替える時点、冬時間と夏時間をユーザーに表示するコード(ある場合)を知るために、アプリケーションがUTCからのオフセットを知るために使用されます(重要なユーザーの場合)。ユーザー)。
TZ
特定のシステムに対して定義されたタイムゾーン仕様を設定することでこれを行うことができます。TZ=:Europe/London
(多くのシステムでもこれを許可しますが)TZ=Europe/London
またはTZ
完全なルールを含めます(制限付き)。
たとえば、TZ=:Europe/London
私のシステムで使用すると、システムからルールが読み込まれます/usr/share/zoneinfo/Europe/London
。
たとえば、ファイルは1996年から10月の最後の日曜日の午前2時(UTC)から3月の最後の日曜日(「グリニッジ標準時」を意味するGMT)までのUTCオフセットを0に指定し、そうでない場合は1(BST) )で指定します。 、これは「British Summer Time」を表します)、1970年(0 Unix時間)から1972年までの年全体は1、BSTという名前は「British Summer Time」を表します。基準時間」。
既にわかるように、BSTをタイムゾーン仕様として使用することは意味がありません。まず、視点によって意味が変わり、現在の時代だけを考慮しても、サマータイムのコードだけなので、年間を通してタイムゾーン仕様として使用することはできません。
TZ
これで完全なルールを含めることもできます。たとえば、1970年代初頭の英国標準時(夏以外)の場合は、最も単純な正式な形式を使用できます。
TZ=BST-1
常にUTCから東に1時間離れた時間帯を指定し、date +%Z
常に返されますBST
。この時間帯は1970年代初頭に英国本土に適しており、1972年以降の夏時間には正確ですが、1972年以降の冬時間には正確です(私たちは将来を予測できません)。
あるいは、現在のルールの完全な仕様を使用することもできます。
TZ=GMT0BST,M3.5.0/1:00:00,M10.5.0/2:00:00
これは、年に2つの期間があることを意味します。 1つはGMTという名前とオフセット0を持ち、もう1つはBSTという名前とオフセット1を持ちます(指定されていない場合は+ 1などの暗黙的に0です)。 、ある期間から別の期間への移行は、3月(3)の最後の(5)日曜日(0)UTC 1:00:00に行われ、10月の最後の日曜日2:00が返されます。
繰り返しますが、TZは1996年から施行されましたが、必ずしも効果的ではありません。たとえば、1970-01-01 00:00:00 UTC(0 Unix epoch時間、ロンドンの現地時間は1:00:00 BST(イギリス標準時))の場合:
$ TZ=:Europe/London date -d @0
Thu 1 Jan 01:00:00 BST 1970
$ TZ=GMT0BST,M3.5.0/1:00:00,M10.5.0/2:00:00 date -d @0
Thu 1 Jan 00:00:00 GMT 1970
TZ=BST-1
よく定義されている(上記のように)TZ=BST
(またはTZ=GMT
/TZ=UTC
/TZ=Europe/London
)が指定されていません。TZ=:BST
/TZ=:Europe/London
はい実装定義。つまり、システムはこれをサポートして実行する作業を文書化するように設計されていますが、POSIXはそのシステムが実行する作業を教えてくれません。
上記の3番目のケースでは、GNUシステム(および他のほとんどのUnixファミリーシステムと考えています)でTZ
始まると、:
次の内容はタイムゾーン定義ファイルのパスとして扱われます。 GNUシステムの場合、省略された場合も同様です:
(値が有効なタイムゾーン仕様を形成しても、UTC0
これらのファイルは通常存在しないはずですが、私のシステムでいくつかの例外を見ることができるので、POSIXではないファイルになります)。システム(例:file1が定義されているため、TZ=CST6CDT date -d 1943-01-01 +%Z
出力は出力CWT
されません。CST
/usr/share/zoneinfo/CST6CDT
展示その期間中))。
パスは通常相対パスであり、この場合は相対パスです($TZDIR
通常設定されていない/usr/share/zoneinfo
場合は一部のデフォルト値と同じです)。セキュリティ上の理由から、コンポーネントを持つ絶対パスまたは相対パスは、権限エスカレーションコンテキスト$TZDIR
(たとえば、setuidコンテキスト)では無視されます。$TZDIR
..
したがって、通常、GNUシステムではTZ=:BST
通常ファイルを見つけるのと同じです。見つからない場合(タイムゾーン定義を識別できないため)、通常はUTC時間とタイムゾーン名(出力に表示されます)を想定します。TZ=BST
/usr/share/zoneinfo/BST
BST
date +%Z
BST
1、、、...CST6CDT
同じものはすべて異なる時代の残骸です。 1993年末にTZデータベース(現在WET
CET
MET
IANAが管理)変更MET
一時的な(そしてしばしば曖昧な)名前(例:、、、GB-Eire
)を使用することから、その都市が(出版当時)最も人口の多い都市であるというWET
事実まで、その地域が適用されます(地域は次のような広い地域です)。Area/City
大陸/海洋)。英国本土の場合(WETではない)を使用したが、GB-Eire
今は(1993年から)以前のバージョンとの互換性のためにEurope/London
。GB-Eire
(例:)WET
は引き続き使用できます(GB-Eire
現在はに接続されていますが、Europe/London
地域WET
は冬にUTCおよびEU DSTルールを使用するように定義されています(イギリス)。がどうなるかは誰にも言えません。))しかし、今は新しい展開に使用してはいけません。
答え3
Gilesの回答に追加するには、OPと同じタイムゾーンにあります。西ヨーロッパ時間とも呼ばれWET
、ポルトガルは私が正確に覚えていたら1996年頃にUNIXタイムゾーンに含まれていました。
https://en.wikipedia.org/wiki/Western_European_Time
ヨーロッパ標準時(WET、UTC±00:00)は、西部と北西ヨーロッパの一部の地域を含む時間帯です。
次の国と地域では、冬にWETを使用しています。
- カナリア諸島、1946年以降(残りスペインはCET、UTC+1) - フェロー諸島、1908年 以降 - グリーン
ランド北東部(デンマーク港および周辺地域)アゾレス諸島を除く、UTC-1)[1] - マデイラ、 1912年 以降猶予イングランド、スコットランド、ウェールズ、チャンネル諸島およびマン島で、1916年から北アイルランド(法的にグリニッジ標準時として知られている)で始まり、一時停止イギリスでは1940年から1945年まで冬にイギリスサマータイム(BST=CET)を使用し、1941年から1945年と1947年まで夏にはイギリス二重夏時間(BDST=CEST)を使用した。 BSTは1968年2月18日から1971年10月31日まで一年中使用されました。
アイスランドを除いて、上記の国々はすべて夏に夏時間を行い、WETより1時間早い西ヨーロッパ夏時間(WEST、UTC + 1)に切り替えます。 WESTはイギリスではイギリスサマータイム(British Summer Time)と呼ばれ、アイルランドでは正式にアイルランド標準時(Irish Standard Time)として知られています。
夏時間の正式名称は、西ヨーロッパ日光セーブタイム(WEST)であり、1時間の高速夏時間/夏時間を考慮してWET
使用されます。TZ
最近では、「ヨーロッパ/ロンドン」はより良い選択かもしれませんが、WET
略語を知ることは状況によってはまだ役に立ちます。
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
したがって、結果を初期テストと比較します。
$date ; TZ=GMT date ; TZ=WET date
Mon May 1 09:36:10 WEST 2017
Mon May 1 08:36:10 GMT 2017
Mon May 1 09:36:10 WEST 2017