1

私はおそらく何か間違ったことをしていますが、その理由はわかりません。DB に UTC 時間を保持する DateTime フィールドがあります

私のサーバーは米国にあり、ブラウザはヨーロッパにあります。

PageLoad コードは次のとおりです。

DateTime t = DateTime.SpecifyKind((DateTime)rdr["startTime"], DateTimeKind.Utc);
label1.Text = t.ToLocalTime().ToString();

表示される時間は、ヨーロッパではなく米国の現地時間です。ブラウザのローカルタイムを表示するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

5

1 つの手法は、クライアント ブラウザーで JavaScript を使用して、クライアントのタイムゾーン オフセット (分単位) を検出することです。

alert((new Date()).getTimezoneOffset());

これはサーバーに送り返され、セッションまたは Cookie に保存され、表示される UTC 日付をオフセットするために使用されます。別の方法として、タイムゾーンを指定できるユーザー プロファイルを作成する方法もあります。

于 2008-11-19T09:28:02.343 に答える
3

toLocalTime は、ブラウザではなくサーバーで実行されます。サーバー側で日付を変換したい場合は、ユーザーがいるタイムゾーンを取得する必要があります (ここヨーロッパには少なくとも 3 つのタイムゾーンがあり、夏時間を数えると 6 つ....)

1 つの方法は、UTC 時刻をクライアントに送信し、JavaScript を使用してそれをユーザーの現地時間に変換することです (JavaScript の Date オブジェクトは、ユーザーのシステムの設定を認識しています)。

于 2008-11-19T09:29:16.740 に答える
1

一部の人が書いたように、コードはサーバー上で実行されているため、適用されるタイムゾーンがサーバーに対してローカルであることは理にかなっています。

.NET 3.5 を使用している場合は、UTC をブラウザーに送信するという彼の提案 (利用できる場合は適切ですが、常にオプションであるとは限りません) と同様に、 TimeZoneInfoを調べる必要があります。これにより、過去の変更を含め、UTC と任意のタイムゾーンの間で変換できます。(タイムゾーンには「GMT+5」などだけではありません。) 大きな問題は、ユーザーが実際にどのタイムゾーンにいるかを把握することです。通常、JavaScript を使用して UTC からの現在のオフセットを取得できますが、それでは得られません。一貫して正しく行うために必要なすべての情報。遅かれ早かれ、ユーザーがいるタイムゾーンのユーザーごとの設定が必要になるかもしれません.

于 2008-11-19T10:04:49.740 に答える
1

クライアントのブラウザでの時間に基づいてデータベースに時間値を保存するのは賢明ではないと思います。

多くの異なるタイムゾーンに多くのクライアントがいて、保存された情報が常に照合または共有されている場合、イベントの順序は正しくありません。たとえば、10:16 GMT は、米国東部時間の 10:30 より前です。

このため、サーバー時間を使用することをお勧めします (または、他の人が言っているように、UTC を使用してみてください)。

于 2008-11-19T10:19:55.203 に答える