2017-06-16 5 views
0

私は、.netコアプロジェクトの日付時刻処理のためにNoda Time libarary(v 2.0.3)を使用しています。しかしながら;私は瞬間をCETの日時に変換するいくつかの問題を抱えています。野田時刻からCETへ

私は野田時代にはかなり新しく、おそらく間違って使っています(CETのtz-dbエントリはCETを全く参照していません)?

例コード

// get current system instant 
var systemInstant = SystemClock.Instance.GetCurrentInstant(); 

// get oslo zoneddatetime from instant 
var osloDateTime = systemInstant.InZone(DateTimeZoneProviders.Tzdb["Europe/Oslo"]); 
// get CET(?) zoneddatetime from instant 
var cetDateTime = systemInstant.InZone(DateTimeZoneProviders.Tzdb["CET"]); 

// output 
Debug.WriteLine(osloDateTime.ToString()); 
Debug.WriteLine(cetDateTime.ToString()); 

上記の例のコードの出力は私を与える:

2017-06-16T22:28:16 Europe/Oslo (+02) 
2017-06-16T22:28:16 CET (+02) 

Acutally IはCETは21時28分16秒(UTC + 1)である時間をゾーニング期待していました22:28:16(UTC + 2)ではありません。 UTC + 1はまた、Time and date websiteの表示内容です。

+0

BTW - 1年中UTC + 1のタイムゾーンが必要な場合は、「Etc/GMT-1」を使用できます。 –

答えて

3

ZoneラインIANAタイムゾーンデータベースはCETゾーンIDについては、この一行が含まれに:

Zone CET  1:00 C-Eur CE%sT 

そしてC-Eurルールの端再発はラインのこのペアである:

Rule C-Eur 1981 max - Mar lastSun 2:00s 1:00 S 
Rule C-Eur 1996 max - Oct lastSun 2:00s 0 - 

したがって、毎年3月の最後の日曜日の午前2時にUTC + 2に入り、毎年10月の最後の日曜日の午前2時にUTC + 1に戻ります。

CETタイムゾーンの「略語」は「CET」と「CEST」の間で異なります。これは誤解を招く可能性があることに注意してください。しかし、Noda Time は、IDの定義に続いて、IANAデータベースごとにです。

これは、略語の使用を避け、ヨーロッパ/オスロなどの完全なゾーンIDを明白に使用する別の理由です。私は、「CET日時」という概念を完全に使用しようとするのを避けることを提案します。

+0

ありがとう、それはすべて今、はるかに理にかなっています。あなたが示唆したように、私はそれが私を混乱させるCET/CESTの違いだと思う。 – Indregaard

1

DateTimeZoneProviders.Tzdb ["CET"]の結果を見ると、最小オフセットは+ 1、最大オフセットは+2であるため、実際の中央ヨーロッパ時間帯を参照していると思います中央ヨーロッパ夏時間[CEST])。

選択した日付が夏時間範囲に入るため、UTC + 2です。

あなたがCETのためにUTC + 1を取得するには、次をしようとした場合:europeファイルの

Instant.FromDateTimeUtc(new DateTime(2017, 01, 01, 12, 0, 0, DateTimeKind.Utc)).InZone(DateTimeZoneProviders.Tzdb["CET"] 
関連する問題