18

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

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

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

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

4

2 に答える 2

11

まず、野田時間を使用するというmgnoonanの回答に拍手を送りたいです:)

すでに適切なタイム ゾーンを使用していますが、DST に関するものではないBaseUtcOffset文書化されているものを使用するべきではありません。

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

オフセットを取得するためにそれを提供していない場合、DSTを考慮に入れることはおそらくできませんDateTime:)

が であると仮定するsomeDateDateTime、次を使用できます。

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate));

または単にConvertTimeToUtc

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

DST 移行のために現地時間が 2 回発生した場合、またはまったく発生しなかった場合にどうするかを検討する必要があることに注意してください。

于 2012-04-04T21:21:59.020 に答える
4

野田時間がお手伝いできるかも?

于 2012-04-04T21:11:08.137 に答える