2016-09-21 47 views
1

雖然試圖區分山區時區和亞利桑那州(我意識到它們都是山地時間),但我發現GetNamesForTimeZone(「America/Phoenix」,「en-us」)返回日光名稱。TimeZoneNames標準,日光,一般用途

我應該依靠外部代碼(noda時間)來確定時間是否爲該時區的日光,或者有沒有辦法從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; 
} 

我可能一個DateTimeZone.InDaylightSaving(Instant)方法添加到2.0 ...

+0

這就是我當時的想法。謝謝 –

1

作爲TimeZoneNames庫的作者,我可以解釋爲什麼會發生這種情況。

首先,America/Phoenix映射到America_Mountain metazone在the CLDR metaZones.xml file

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

其他時區也都在相同的元區:

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

然後,在每個CLDR語言文件,如the en.xml file對於英語,您將看到帶有本地化字符串的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> 

因此,CLDR中沒有關於DST是否適用於亞利桑那州的信息。請記住,亞利桑那州過去確實有DST - last in 1967。因此,如果沒有TZDB數據,您可以在​​中找到該數據,則無法確定DST是否在某個特定時間點有效。

Jon's answer顯示如果使用野田時間DST生效,您將如何測試。獲得結果後,您可以相應地從TimeZoneNames中選擇標準或日光字符串。

至於通用名稱,通常在人類通常指時區時使用,而不是指日光時間部分或標準時間部分。一個用例就是時區選擇,例如here

+0

謝謝馬特。如果我有關於你的TimeZoneNames庫的另一個問題(當我不在提升的信任中時,在Silverlight中出現錯誤)。我應該使用什麼標籤以便您查看它,還是應該直接將它發佈到TimeZoneNames的github上?只是想確保你能看到它。既然Silverlight不再被支持,你甚至可能不會考慮它(我們的WPF和Silverlight有一些共享的代碼),但我想我會問。 –

+0

嗯..發佈它,當然。我會盡可能地看看。沒有承諾,但。:) –

+0

記錄爲TimeZoneNames庫的git回購問題。 –