C# を使用してすべてのタイム ゾーンの夏時間の境界を取得するにはどうすればよいですか?
2 に答える
5
TimeZone.GetDaylightChangesメソッドを見てください。
編集:
TimeZoneクラスを見ると、ローカルタイムゾーンのみをサポートし、現在の年のみをサポートしているようです。TimeZoneInfo.GetAdjustmentRulesを見てください。これにより、任意のタイムゾーンの調整ルールを取得できます。そのページの例は、ここでのタスクと非常によく似ているようです。
于 2012-10-17T18:34:08.343 に答える
4
免責事項:私は以下で参照されているNodaTimeライブラリの主な著者です:)
バニラの.NETコードだけを使用するのは比較的難しいです。
TimeZone
履歴データを使用しませんTimeZoneInfo
遷移を見つけるのは簡単ではありません。基本的に、ルールデータを自分で解釈する必要があります。はすべての情報を提供しますが、経験から、本当に必要な場合を除いて、それに対してコーディングを試みることは避けることをお勧めします。TimeZoneInfo.GetAdjustmentRules
ただし、 Noda Timeを使用すると、これをかなり簡単に行うことができます。以下のコードは、BCLタイムゾーンのラッパーを使用しています。TZDBタイムゾーン(「ヨーロッパ/ロンドン」など)を使用するように変更Bcl
します。Tzdb
using System;
using NodaTime;
class Test
{
static readonly Instant Start = Instant.FromUtc(2002, 10, 17, 0, 0);
static readonly Instant End = Instant.FromUtc(2012, 10, 17, 0, 0);
static void Main()
{
var provider = DateTimeZoneProviders.Bcl;
foreach (var id in provider.Ids)
{
var zone = provider[id];
ShowTransitions(zone);
}
}
static void ShowTransitions(DateTimeZone zone)
{
Console.WriteLine("{0}:", zone.Id);
var zoneInterval = zone.GetZoneInterval(Start);
while (zoneInterval.End < End)
{
Console.WriteLine("{0} - {1}: {2}",
zoneInterval.Start,
zoneInterval.End,
zoneInterval.WallOffset);
zoneInterval = zone.GetZoneInterval(zoneInterval.End);
}
}
}
于 2012-10-17T18:39:09.070 に答える