8

私のデータベースはカリフォルニアなどにあります。私のユーザーテーブルには、-0700 UTC など、すべてのユーザーのタイムゾーンがあります

ニューヨークなどに住んでいるユーザーに日付を表​​示するたびに、データベース サーバーから時刻を調整するにはどうすればよいですか? UTC/GMT -4 時間

4

5 に答える 5

4

データを UTC 形式で保存し、ローカル タイムゾーン形式で表示する必要があります。

DateTime.ToUniversalTime() -> server;
DateTime.ToLocalTime() -> client

AddXXX メソッド グループを使用して日付/時刻を調整できますが、エラーが発生しやすくなります。.NET は、System.TimeZoneInfoクラスでタイム ゾーンをサポートしています。

于 2008-09-23T00:34:12.023 に答える
2

.Net を使用する場合は、.Net を使用できますTimeZoneInfo。質問に「c#」のタグを付けたので、そうすると思います。

最初のステップは、TimeZoneInfo変換先のタイム ゾーンの を取得することです。あなたの例では、ニューヨークのタイムゾーンです。これを行う方法は次のとおりです。

//This will get EST time zone
TimeZoneInfo clientTimeZone
    = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

//This will get the local time zone, might be useful
// if your application is a fat client
TimeZoneInfo clientTimeZone = TimeZoneInfo.Local;

次に、DB から a を読み取った後、それが正しく設定されDateTimeていることを確認する必要があります。KindDB 内の が UTC であると仮定するとDateTime(ちなみに、通常はこれが推奨されます)、次のように変換するように準備できます。

DateTime aDateTime = dataBaseSource.ReadADateTime();
DateTime utcDateTime = DateTime.SpecifyKind(aDateTime, DateTimeKind.Utc);

最後に、別のタイム ゾーンに変換するには、次のようにします。

DateTime clientTime = TimeZoneInfo.ConvertTime(utcDateTime, clientTimeZone);

いくつかの余分な発言:

  • TimeZoneInfoいくつかの特定のタイム ゾーンのみに関心がある場合は、静的フィールドに格納できます。
  • TimeZoneInfo夏時間に関する情報を保存します。したがって、それについて心配する必要はありません。
  • アプリケーションが Web の場合、クライアントがどのタイム ゾーンにいるかを確認するのは難しい場合があります。ここで 1 つの方法について説明します: http://kohari.org/2009/06/15/automagic-time-localization/

これが役立つことを願っています。:)

于 2009-07-25T21:56:23.423 に答える
0

ご存知のとおり、これは良い質問です。今年、私は最初のDBアプリケーションを作成しました。時間に関連する入力データは、Int64値であるため、DBに保存しました。私のクライアントアプリケーションはそれを取得し、その値に対してDateTime.FromUTC()またはFromFileTimeUTC()を実行し、.LocalTime()を実行して現地時間で物事を表示します。これが良い/悪い/ひどいのかどうか疑問に思いましたが、これまでのところ私のニーズには十分に機能しています。もちろん、作業は、DB自体ではなく、私が作成したデータアクセス層ライブラリによって行われることになります。

十分に機能しているように見えますが、この種のことについてより多くの経験を持っている他の人が、これが最善のアプローチではない場所を指摘できると信じています。

幸運を!

于 2008-09-23T00:50:53.170 に答える
0

.NET 3.5 (VS 2008) まで、.NET には、UTC との間の変換を除いて、タイムゾーンのサポートが組み込まれていません。

時差が 1 年中 (夏と冬) 常に正確に 3 時間である場合は、 を使用yourDate.AddHours(3)して一方の方法を変更し、元の方法でyourDate.AddHours(-3)変更します。この 3 時間を足し算/引き算する理由を説明する関数に、必ずこれを考慮に入れてください。

于 2008-09-23T00:35:32.037 に答える
0

TimeZoneInfo.GetSystemTimeZones() の組み合わせを使用してから、TimeZoneInfo.BaseUtcOffset プロパティを使用して、オフセットの差に基づいてデータベース内の時間をオフセットできます。

System.TimeZoneInfo に関する情報はこちら

于 2008-09-23T00:36:08.773 に答える