Olson和Windows時間標識之間的轉換在SO上出現了多次;許多人建議Jon Skeet的Noda Time完成這項任務。使用野田時間的Olson時區標識轉換爲Windows標準格式
雖然谷歌代碼頁面聲明有一個函數可以在兩者之間進行轉換,但我無法在如何執行此操作的任何地方找到細節。
任何人都可以指向正確的方向嗎?從Windows到奧爾森
Olson和Windows時間標識之間的轉換在SO上出現了多次;許多人建議Jon Skeet的Noda Time完成這項任務。使用野田時間的Olson時區標識轉換爲Windows標準格式
雖然谷歌代碼頁面聲明有一個函數可以在兩者之間進行轉換,但我無法在如何執行此操作的任何地方找到細節。
任何人都可以指向正確的方向嗎?從Windows到奧爾森
TzdbTimeZoneProvider
支持轉換,但BclTimeZoneProvider
(提供用於Windows時區)沒有正確執行MapTimeZoneId
方法和界面似乎是錯誤的...
這裏是TzdbTimeZoneProvider
實現:
public string MapTimeZoneId(TimeZoneInfo zone)
{
string str;
this.windowsIdMap.TryGetValue(zone.Id, out str);
return str;
}
注:windowsIdMap是一本字典
這是在執行BclTimeZoneProvider
:
public string MapTimeZoneId(TimeZoneInfo timeZone)
{
return timeZone.Id;
}
注意:它只是返回窗口時區的id。
看來這種方法更正確的接口將是:
string MapTimeZoneId(string providerZoneId);
那麼這兩種實現可以正確完成。我想你可以把這個問題放在Noda Time谷歌組織。
現在,您可以查看TzdbTimeZoneProvider
以查找如何從Olson映射到Windows tz(通過windowsIdMap值進行簡單迭代)。
實現很好 - MapTimeZoneId的目的是將*從* Windows *映射到*提供者特定的ID。這就是爲什麼它需要一個'TimeZoneInfo'而不是一個字符串。 –
@JonSkeet:謝謝你的澄清,我現在看到。 –
不,不幸的是,我們現在還沒有映射方式(Windows到Olson)。
所有的「提供者」界面的略在空中現在:
換句話說:對不起,我們目前暫不支持,但是在試圖完成1.0 API時我們會牢記它。
在代碼中沒有看到一個。您可以從Olson ids或Windows TimeZoneInfo對象創建'DateTimeZone'對象,但無法轉換AFAIK。 –
現在可以使用Noda Time 1.1.0來完成。 [我在這裏發佈了轉換函數。](http://stackoverflow.com/q/17348807/634824) –