雖然試圖區分山區時區和亞利桑那州(我意識到它們都是山地時間),但我發現GetNamesForTimeZone(「America/Phoenix」,「en-us」)返回日光名稱。TimeZoneNames標準,日光,一般用途
我應該依靠外部代碼(noda時間)來確定時間是否爲該時區的日光,或者有沒有辦法從TimeZoneNames函數中知道區域是否沒有夏令時?
在同樣的說明中,使用「通用」名稱作爲時區名稱而不是標準和日光的用例是什麼?
雖然試圖區分山區時區和亞利桑那州(我意識到它們都是山地時間),但我發現GetNamesForTimeZone(「America/Phoenix」,「en-us」)返回日光名稱。TimeZoneNames標準,日光,一般用途
我應該依靠外部代碼(noda時間)來確定時間是否爲該時區的日光,或者有沒有辦法從TimeZoneNames函數中知道區域是否沒有夏令時?
在同樣的說明中,使用「通用」名稱作爲時區名稱而不是標準和日光的用例是什麼?
據我所知,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 ...
這就是我當時的想法。謝謝 –
作爲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。
謝謝馬特。如果我有關於你的TimeZoneNames庫的另一個問題(當我不在提升的信任中時,在Silverlight中出現錯誤)。我應該使用什麼標籤以便您查看它,還是應該直接將它發佈到TimeZoneNames的github上?只是想確保你能看到它。既然Silverlight不再被支持,你甚至可能不會考慮它(我們的WPF和Silverlight有一些共享的代碼),但我想我會問。 –
嗯..發佈它,當然。我會盡可能地看看。沒有承諾,但。:) –
記錄爲TimeZoneNames庫的git回購問題。 –
你的意思是使用https://github.com/mj1856/TimeZoneNames?目前還不清楚你的代碼是什麼樣的。 [mcve]會有幫助。 –