OlsonとWindows時刻の間の変換IDは、SOに何度も現れています。多くの人々がこのタスクのためにJon SkeetのNoda Timeを提案しています。Noda Timeを使用したOlsonタイムゾーンIDからWindows標準形式へ
Googleコードページには2つの間で変換する機能があると書かれていますが、これを行う方法の詳細はわかりません。
誰でも正しい方向に向けることができますか?オルソンへのWindowsから
OlsonとWindows時刻の間の変換IDは、SOに何度も現れています。多くの人々がこのタスクのためにJon SkeetのNoda Timeを提案しています。Noda Timeを使用したOlsonタイムゾーンIDからWindows標準形式へ
Googleコードページには2つの間で変換する機能があると書かれていますが、これを行う方法の詳細はわかりません。
誰でも正しい方向に向けることができますか?オルソンへの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;
}
注:WindowsのタイムゾーンのIDを返します。それはそう
この方法のためのより適切なインターフェイスは次のようになります。
string MapTimeZoneId(string providerZoneId);
その後、両方の実装を正しく行うことができます。私はあなたがノーダタイムGoogleグループにこの質問を置くことができると思います。
ここでは、TzdbTimeZoneProvider
を調べることで、OlsonからWindows tz(windowsIdMap値を使った簡単な繰り返し)にマップする方法を見つけることができます。
実装はうまくいきます - 'MapTimeZoneId'の目的は、* Windows *からプロバイダ固有の*にマップすることですID。そのため、文字列の代わりに 'TimeZoneInfo'が必要です。 –
@JonSkeet:説明をありがとう、私は今参照してください。 –
いいえ、残念ながら、私たちは今のところラウンド(WindowsからOlsonへ)のマッピングを持っていません。
「プロバイダ」インターフェースのすべて今少し空中にある:
つまり、申し訳ありませんが、現時点ではこれをサポートしていませんが、1.0 APIを完成させようとしている際にはご留意ください。
コード内に1つもありません。 Olson idsまたはWindows TimeZoneInfoオブジェクトから 'DateTimeZone'オブジェクトを作成できますが、AFAIKは変換できません。 –
Noda Time 1.1.0でこれを行うことができます。 [変換関数をここに掲載しました](http://stackoverflow.com/q/17348807/634824) –