2012-04-04 11 views
8

CETとCESTの両方を考慮に入れた中欧向けの汎用TimeZoneInfoはありますか?中央ヨーロッパ向けの汎用TimeZoneInfoはありますか?

私は次のことをやっているアプリを持っている:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset); 
var utcDate = dto.ToUniversalTime().DateTime; 

問題はBaseUtcOffsetは1ではなく2であるので、これは間違ったutcDateを返しているということです。 CETにはDSTもあり、年の時間によって+1または+2になります。

答えて

5

まず、私は野田時間を使用してのmgnoonanの答えを称賛したいと思います:)しかし、あなたはあまり冒険...

を感じている場合は、すでに右のタイムゾーンを使用している - しかし、あなたはいけませんはDSTについてではないを文書化されBaseUtcOffsetを使用する:

は、現在のタイムゾーンの標準時間と協定世界時(UTC)との間の時間差を取得します。

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate)); 
:あなたはそれを someDateDateTimeで、あなたが使用したと仮定すると:)

のオフセットをフェッチするDateTimeを提供していないとき、それはおそらく考慮DSTを取ることができない

それともConvertTimeToUtc

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi); 

注意DSTの移行のために現地時間が2回発生した場合や、まったく発生しない場合は、何をしたいかを検討する必要があります。

+0

私はちょうどあなたが答えるのを待たなければならないことを知っていました。 ;) – mgnoonan

+0

大きな説明。 Noda Timeは適切なツールかもしれませんが、これはうまく機能しており、現在のプロジェクトに最適なソリューションです。 –

+0

ちょっとマイナーなコメント:ConvertTimeToUtcは静的メソッドなので、 をコールする必要があります。var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate、tzi) – Eoin

4

Noda Timeがお手伝いできますか?

+0

次回は、野田時間を次回使用する予定です。ありがとう! –