0

私は Windows サービス アプリケーションを開発しており、あるタイムゾーンでアプリケーション サーバーを実行し、別のタイムゾーンで db サーバー (実際には Web サービス) を実行したら、夏時間で作業する必要があります。

新しいデータがデータベースに記録されるたびに、現在のローカル日時が使用されます。これは、アプリサーバーの日時とは異なるため、データベースで結果を見つける必要がある場合は、オフセットを増減する必要があります正しい日時を使用して検索する日時ですが、夏時間が変更されると、このオフセットを手動で変更する必要があるため問題が発生し、誰かがシステムを監視する必要があるため、多くの問題が発生しています。

この情報を取得するために、他のツールや Web サイトなどを使用したくはありません。Microsoft のものを使用する必要があるだけです。

.NET 2.0 で TimeZones を操作する方法を探してきましたが、何も見つかりませんでした。私の質問は、ここの誰かがこのような状況に直面したことがありますか?

4

3 に答える 3

0

UTC 値を使用してデータベースに保存し、アプリ内のローカルまたは他の TimeZone に変換することをお勧めします

DateTime.Now.ToUniversalTime() DateTime.SpecifyKind(dt, DateTimeKind.Local);

http://msdn.microsoft.com/en-us/library/system.datetime.utcnow.aspx

または、LocaizedDateTime を作成できます

========

更新しました:

using System;
using System.Collections.Generic;

public class MyClass
{
    public static void RunSnippet()
    {
        LocalizedDateTime dt = LocalizedDateTime.FromUtc(DateTime.UtcNow);
        Console.WriteLine(dt.LocalDateTime.ToString("dd/MM/yyyy hhmmss"));
        Console.WriteLine(dt.UtcDateTime.ToString("dd/MM/yyyy hhmmss"));
    }

    #region Helper methods

    public static void Main()
    {
        try
        {
            RunSnippet();
        }
        catch (Exception e)
        {
            string error = string.Format("---\nThe following error occurred while executing the snippet:\n{0}\n---", e.ToString());
            Console.WriteLine(error);
        }
        finally
        {
            Console.Write("Press any key to continue...");
            Console.ReadKey();
        }
    }

    private static void WL(object text, params object[] args)
    {
        Console.WriteLine(text.ToString(), args);   
    }

    private static void RL()
    {
        Console.ReadLine(); 
    }

    private static void Break() 
    {
        System.Diagnostics.Debugger.Break();
    }

    #endregion
}

public class LocalizedDateTime
{
    private LocalizedDateTime(DateTime localDateTime)
    {
        LocalDateTime = DateTime.SpecifyKind(localDateTime, DateTimeKind.Local);
    }

    public DateTime UtcDateTime{
        get{
            return LocalDateTime.ToUniversalTime();
        }
    }

    public DateTime LocalDateTime{get; private set;}

    public static LocalizedDateTime FromLocal(DateTime localDateTime)
    {
        return new LocalizedDateTime(localDateTime);
    }

    public static LocalizedDateTime FromUtc(DateTime utcDateTime)
    {
        return new LocalizedDateTime(TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, TimeZoneInfo.Local));
    }
}
于 2013-11-04T17:22:22.110 に答える