私のBSTタイムゾーンは1時間遅いですか?

私のBSTタイムゾーンは1時間遅いですか?

私のシステム(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

POSIXによると行動

  • 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/BSTBSTdate +%ZBST


1、、、...CST6CDT同じものはすべて異なる時代の残骸です。 1993年末にTZデータベース(現在WETCETMETIANAが管理)変更MET一時的な(そしてしばしば曖昧な)名前(例:、、、GB-Eire)を使用することから、その都市が(出版当時)最も人口の多い都市であるというWET事実まで、その地域が適用されます(地域は次のような広い地域です)。Area/City大陸/海洋)。英国本土の場合(WETではない)を使用したが、GB-Eire今は(1993年から)以前のバージョンとの互換性のためにEurope/LondonGB-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

関連情報