2012-04-06 10 views
0

私はクライアントがイベントを作成し、ユーザーがこれらのイベントに登録するasp.net Webサイトで作業しています。日時を保存して表示する方法の話題を多く読んだ後、私はまだどのルートをとるべきか混乱しています。イベントのタイムゾーン対応asp.net Webサイト:UTCとローカル日時

最も受け入れられる解決策(件名を検索した後)は、すべてをUTCで保存し、クライアントのタイムゾーンオフセットを差し引いて表示します。別の方法として、datetimeをイベントのタイムゾーン(イベントではなくサーバーの場所のローカル時刻)に格納し、リクエストされたときにクライアントにそのまま表示する方法があります。それはより効率的ではないでしょうか?何か不足していますか?このように夏時間の節約が考慮されていますか?

ありがとうございます。

+0

アプリケーションのすべてのタイムスタンプにUTCを使用し、ユーザーのタイムゾーンに基づいて調整するのはずっと簡単です – Greg

答えて

1

すべてをUTCで保存するのが理由です。

イベントを現地時間で保存する代わりに、イベントが実際に行われた時とは異なるタイムゾーンのユーザーに混乱が生じます。

+0

あなたは絶対に正しいですが、イベントはクライアントに属し、すべてではないのでそれは混乱の原因ですか?イベントの開始時間を表示するとき、表示された時間が現地時間であると仮定するのは論理的ではないのですか? –

+0

多くの場合、Datetimesはクライアントと同じタイムゾーンで表示されます。たとえば、私はESTにいるので、フォーラムなどで通常見られるすべての日付がESTに表示されます。 – Khan

+0

最も簡単な変換方法は、タイムスタンプをUTCで取得し、それをクライアントのタイムゾーンに変換することです。だから私の例では、私が見るタイムスタンプはすべてUTC -5時間です。 – Khan

0

もしDB

日時CurrntDate = DateTime.SpecifyKind(DateTime.Now、 DateTimeKind.Unspecified)に格納するC#のasp.net

  1. を使用している場合、 var _utc = TimeZoneInfo.ConvertTimeToUtc(CurrntDate、TimeZoneInfo.Local);

  1. クライアントからの日付を取得し、クライアントのタイムゾーンおよび表示に変換します。

あなたのビジネスロジックに一貫性があります。基準点として、イベントの場所のタイムゾーンを使用して

+0

私はあなたのポイントSunilを参照してください。ありがとう。ところで、変換関数はTimeZoneInfo.ConvertTimeToUtc(CurrntDate、TimeZoneInfo.Local)でなければなりません。 –

+0

コメントありがとう私は私の答えを更新します。 –

1

、我々は(.NET 3.5または4.0で)現在のローカル時刻を取得するには、この操作を行うことができます。

string EventTimeZoneId = "GTB Standard Time"; // for instance, this should be stored in DB as varchar[32] 
DateTime EventLocalTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, EventTimeZoneId); 

これは夏時間も考慮します。私が考えることができる唯一の欠点は、クライアントがイベントを作成している間に間違ったタイムゾーンを選択すると、すべての登録に間違った時間がかかることです。

関連する問題