4

クライアント要求を処理するためにサーバーを必要とするアプリケーションが 1 つあります。

このアプリケーションでは、時間が非常に重要です。

クライアントが何かをリクエストするたびに、リクエストの時間を節約したいと思います。

問題は、サーバーが米国にあり、クライアントがオーストラリアにあることです。

サーバー時間をクライアント時間に変更してデータベースに保存するにはどうすればよいですか。

これは、昼間でも正確なはずです。

どうすればこれを達成できますか

わかりました、UTC としてデータベースに時間を保存しました。

クライアント側には、このコードがあります。

 DateTime dt = booking.CreateDateTime.Value;
 var localTime = TimeZone.CurrentTimeZone.ToLocalTime(dt);

そのlocalTimeを印刷すると、現地時間より7時間速くなります。

その時間を現地時間に変更するにはどうすればよいですか?

4

4 に答える 4

4

私が知っているガイドラインでは、時刻は常に UTC としてデータベースに保存されるべきであり、決してローカルでは保存されるべきではないと述べています。このようにして、多くのローカル時差の落とし穴 (サマータイムを含む) を回避します。

現地時間が必要な場合は、データベースから UTC として取得し、変換します。DateTime 構造体を使用して、これを支援できます。

var utcNow = DateTime.UtcNow;
SaveToDB(utcNow);
var utcFromDb = RetrieveTimeFromDb();
var localTime = DateTime.ToLocalTime(utcFromDb);
于 2012-11-03T16:33:04.423 に答える
0

時刻をUTCで保存することに同意しました。(サーバーではなく)クライアントの現地時間に変換するときに問題が発生します。クライアントの現地時間に変換するには、クライアントのタイムゾーン情報を知り、これをUTC時間とともにデータベースに保存する必要があります。

次に、両方の情報を使用して、上記の方法を使用してクライアントの現地時間に変換できるようにする必要があります。

于 2012-11-03T17:07:40.947 に答える
0

通常、日付を UTC で保存し、必要に応じてロケールに変換することをお勧めします。

var date = DateTime.UtcNow();
var tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time");
var offset = tzi.GetUtcOffset(date);
于 2012-11-03T16:33:24.670 に答える
0

多分TimeZoneInfoクラスを見てみましょうか?

それがあなたのニーズを満たさない場合は、野田タイムがあります.

于 2012-11-03T16:33:37.743 に答える