3

システム レジストリが DateTime オブジェクトを対応する TimeZone に変換するのにどのように役立つのか理解できません。リバース エンジニアリングを試みた例がありますが、夏時間に応じて UTCtime がオフセットされるという 1 つの重要なステップをたどることができません。

私は.NET 3.5を使用しています(神に感謝します)が、それでも私を困惑させています。

ありがとう

編集: 追加情報: この質問は、WPF アプリケーション環境で使用するためのものでした。以下に残したコード スニペットは、探していたものを正確に取得するために、回答の例をさらに一歩進めたものです。

4

3 に答える 3

10

これは、WPF アプリケーションで使用している C# のコード スニペットです。これにより、指定したタイム ゾーン ID の現在の時刻 (夏時間調整済み) が得られます。

// _timeZoneId is the String value found in the System Registry.
// You can look up the list of TimeZones on your system using this:
// ReadOnlyCollection<TimeZoneInfo> current = TimeZoneInfo.GetSystemTimeZones();
// As long as your _timeZoneId string is in the registry 
// the _now DateTime object will contain
// the current time (adjusted for Daylight Savings Time) for that Time Zone.
string _timeZoneId = "Pacific Standard Time";
DateTime startTime = DateTime.UtcNow;
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById(_timeZoneId);
_now = TimeZoneInfo.ConvertTime(startTime, TimeZoneInfo.Utc, tst);

これは私が最終的に得たコードスニピットです。助けてくれてありがとう。

于 2008-10-22T18:44:40.843 に答える
4

DateTimeOffset を使用して UTC オフセットを取得できるため、その情報についてレジストリを掘り下げる必要はありません。

TimeZone.CurrentTimeZone は追加のタイム ゾーン データを返し、TimeZoneInfo.Local にはタイム ゾーンに関するメタ データ (夏時間をサポートしているかどうか、さまざまな州の名前など) があります。

更新:これは具体的にあなたの質問に答えると思います:

var tzi = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
var dto = new DateTimeOffset(2008, 10, 22, 13, 6, 0, tzi.BaseUtcOffset);
Console.WriteLine(dto);
Console.ReadLine();

そのコードは、-8 オフセットで DateTime を作成します。インストールされている既定のタイム ゾーンは、MSDN に一覧表示されています

于 2008-10-22T15:52:15.480 に答える
1
//C#.NET
    public static bool IsDaylightSavingTime()
    {
        return IsDaylightSavingTime(DateTime.Now);
    }
    public static bool IsDaylightSavingTime(DateTime timeToCheck)
    {
        bool isDST = false;
        System.Globalization.DaylightTime changes 
            = TimeZone.CurrentTimeZone.GetDaylightChanges(timeToCheck.Year);
        if (timeToCheck >= changes.Start && timeToCheck <= changes.End)
        {
            isDST = true;
        }
        return isDST;
    }


'' VB.NET
Const noDate As Date = #1/1/1950#
Public Shared Function IsDaylightSavingTime( _ 
 Optional ByVal timeToCheck As Date = noDate) As Boolean
    Dim isDST As Boolean = False
    If timeToCheck = noDate Then timeToCheck = Date.Now
    Dim changes As DaylightTime = TimeZone.CurrentTimeZone _
         .GetDaylightChanges(timeToCheck.Year)
    If timeToCheck >= changes.Start And timeToCheck <= changes.End Then
        isDST = True
    End If
    Return isDST
End Function
于 2011-03-10T23:21:27.890 に答える