2

Windows でオルソン タイム ゾーンからタイム ゾーンを変換する必要があります。PHP を使用します。

これを見つけましたhttp://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml

このデータを使って変換するのは難しくないようです。

しかし、質問があります:

1) この情報源を信頼できますか?

2) 複数の値を持つ型を解析する方法:

<mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville"/>

スペース文字で区切られた?

  • アメリカ/ニューヨーク_ニューヨーク
  • アメリカ/デトロイト
  • アメリカ/インディアナ/ピーターズバーグ
  • アメリカ/インディアナ/ビンセンズ
  • アメリカ/インディアナ/ウィナマック
  • アメリカ/ケンタッキー/モンティセロ
  • アメリカ/ルイビル

しかし、一部のゾーンに 3 つのコンポーネントがあるのはなぜでしょうか?

3) Olson のタイム ゾーンを変換するときは常にそこにある => Windows のタイム ゾーンは 1 つのタイム ゾーンのみを受け取るか、それ以上のタイム ゾーンを受け取りますか? そして、この場合はどうすればよいですか?

4) 落とし穴はありますか? たとえば、UTC。

4

1 に答える 1

1

はい、そのソースは信頼できます。実際、このタイプの変換に使用するのに最適なソースです。同じデータを使用して、.NET の変換関数を実装しました。

あなたの質問はPHPについて尋ねているので、これは重複した質問ではないと考えます.PHPはWindowsでもIANA/Olsonタイムゾーンを使用しているため、なぜPHPでこれをやりたいのか知りたいです.

Windows のタイム ゾーンは IANA ゾーンより広い傾向があるため、マッピングに複数の値が存在する理由が説明されています。リストは実際にはスペースで区切られており、CLDR 仕様では、リストの最初のエントリが CLDR の正規参照である必要があります。

一部のゾーンに 3 つのコンポーネントがある理由は CLDR とは関係ありませんが、これらは実際には元のゾーン識別子です。 ウィキペディアには良い説明があります。

Olson から Windows への識別子は 1 つだけですが、必ずしも Windows から Olson への識別子ではありません。

はい、さらに落とし穴があります。

  • すべての IANA/Olson ゾーンを Windows ゾーン ID にマップできるわけではありません。例:America/Atikokan

  • CLDR と IANA は何が標準的かについて意見が分かれています。CLDR の正規 ID は変更されませんが、IANA の正規 ID は実際に変更でき、以前の ID をリンクに置き換えます。これにより、すべてのリンクを確認する必要があるため、Olson から Windows へのマッピングが少し難しくなります。

    たとえば、インドはAsia/CalcuttaCLDR に属しています。IANA tzdb で更新され、リンクAsia/Kolkataに置き換えAsia/Calcuttaられました。Asia/KolkataWindows の「インド標準時」にマップするには、ゾーンのすべてのリンクをマッピングに対してチェックする必要があります。

  • CLDR は、Windows の「UTC」ゾーンを「Et/GMT」にマップします。IANA はEtc/UTC(および他の略語を) リンクではなく、別個のゾーンと見なします。したがって、これらを手動で処理する必要があります。

于 2014-12-15T22:09:30.360 に答える