2016-09-21 7 views
1

山岳時間帯とアリゾナを区別しようとしている間に(私は彼らが両方とも山岳時間であることを認識しています)、GetNamesForTimeZone( "America/Phoenix"、 "en-us"名。TimeZoneNames標準、夏時間、一般的な使用

外部コード(ノーダタイム)を使用して、そのタイムゾーンが昼光かどうかを判断する必要がありますか?ゾーンに夏時間がない場合、TimeZoneNames関数から知る方法がありますか?

同じメモでは、標準と対日の代わりにタイムゾーン名に「一般」の名前を使用するのはどのような場合ですか?

+0

https://github.com/mj1856/TimeZoneNamesを使用していることを意味しますか?あなたのコードが現時点でどのように見えるのかは不明です。 [mcve]は役に立ちます。 –

答えて

2

私が言うことができる限り、TimeZoneNamesは時間帯の名前そのものに関するもので、タイムゾーンのデータそのものについてはわかりません。

あなたがアメリカ/フェニックスは現在夏時間を観察しているかどうかを知りたい場合は、私は間違いなく野田時間そのものを使用したい:

// Usually pass in System.Clock.Instance as the clock... 
// or take an Instant instead. 
public bool IsCurrentlyObservingDaylightSavings(string id, IClock clock) 
{ 
    var zone = DateTimeZoneProviders.Tzdb[id]; 
    var now = clock.Now; 
    var zoneInterval = zone.GetZoneInterval(now); 
    return zoneInterval.Savings != Offset.Zero; 
} 

私はうまく2.0にDateTimeZone.InDaylightSaving(Instant)メソッドを追加することができ...

+0

それは私が考えていたものです。ありがとうございました –

1

TimeZoneNamesライブラリの著者として、なぜこのようなことが起こるのか説明できます。

<timezone type="America/Denver"> 
    <usesMetazone mzone="America_Mountain"/> 
</timezone> 

その後、各CLDR言語ファイルでは、このようなthe en.xml fileとして:the CLDR metaZones.xml file

<timezone type="America/Phoenix"> 
    <usesMetazone mzone="America_Mountain"/> 
</timezone> 

その他の時間帯は、同じメタゾーンにもあるでAmerica_Mountain metazoneへ

まず、America/Phoenixマップ英語の場合は、ローカライズされた文字列でAmerica_Mountainメタゾンエントリが表示されます。

<metazone type="America_Mountain"> 
    <long> 
     <generic>Mountain Time</generic> 
     <standard>Mountain Standard Time</standard> 
     <daylight>Mountain Daylight Time</daylight> 
    </long> 
    <short> 
     <generic>MT</generic> 
     <standard>MST</standard> 
     <daylight>MDT</daylight> 
    </short> 
</metazone> 

DSTがアリゾナ州に適用されるかどうかについての情報はCLDRにはありません。アリゾナ州は過去にDSTを実際に持っていたことを覚えておいてください - last in 1967。したがって、​​にあるようなTZDBデータがなければ、特定の時点でDSTが有効かどうかを判断することはできません。

Jon's answerは、DSTがNoda Timeを使用しているかどうかをテストする方法を示しています。結果が得られたら、それに応じてTimeZoneNamesから標準または日光ストリングを選択できます。

一般名は、人間が一般的にタイムゾーンを参照しているときに通常使用され、夏時間部分または標準時刻部分ではありません。このためのユースケースの1つは、hereなどのタイムゾーン選択です。

+0

マット。あなたのTimeZoneNamesライブラリに関する別の質問がある場合(昇格された信頼ではなく、Silverlightでエラーが発生しています)あなたがそれを見るように、私はどのようなタグを使うべきですか、それともTimeZoneNamesのgithubに直接投稿すべきですか?ちょうどあなたにそれが見えるようにしたかったのです。もはやSilverlightはサポートされていないので、WPFとSilverlightにはいくつかの共有コードがあります。 –

+0

ええ、投稿してください。私はできる時に見ていきます。しかし約束はない。:) –

+0

TimeZoneNamesライブラリのgit repoに問題として記録されています。 –

関連する問題