2

ここでトリッキーな状況。私たちのアプリケーションは、特定のTimeZone(たとえばアジア時間)で設定されたシステムで実行されます。ただし、クライアントは、自分のアプリケーションをヨーロッパのタイムゾーンを使用して実行するように要求します。

データはUTCに保存されていないので、表示されるすべての日付がEurope TimeZoneを使用するように、アプリケーションでロケールを設定できますか?Web.Configでカルチャ情報を設定できることは理解していますが、それがTimeZoneの設定にも役立つかどうかはわかりません。

ところで、私たちのアプリケーションはC#WebFormとMSSQL2008R2を使用して実行されています。

4

3 に答える 3

2

データの保存方法は、データの表示方法とはまったく異なります。日付と時刻が固定された時点を表すものであると仮定すると (「ローカル」時刻を浮動させるのではなく)、可能な限り多くのアプリケーションをDateTimeUTC の値で記述しようとします。データを取得するときは、必要に応じて「ストレージ タイム ゾーン」から変換し (データが保存されているゾーンについては言及していません)、保存するときに元に戻します表示するときは、必要な時間帯で表示してください。

.NET に関する限り、これをグローバル レベルで設定する必要はありません。アプリケーション全体の構成設定 (本当に必要な場合) と、表示する必要があるときにいつでも変換するための「ヘルパー」コードを使用できます。ただし、私は非常に明示的に行います。時間に関しては、暗黙的に変換が行われることを本当に望んでいません。

(また、日付と時刻に関しては、私のNoda Timeライブラリがより明確な API として役立つ可能性があることにも言及しておきます。もちろん、私は偏っています。可能であれば、すべてを UTC で保存するように移行することもお勧めします。 ..もちろん、適切な場合にのみ。)

于 2013-03-15T06:55:18.530 に答える
1

DateTimeOffset日付を次のように保存する必要があります。

協定世界時 (UTC) を基準とした特定の時点を表し、通常は日付と時刻で表されます。

DateTimeOffsetこれらの日付は、イベントが発生したオフセットを失うことなく任意のタイムゾーンに簡単に変換できるため (つまり、ある時点のデータを保存する)、を使用すると大きな利点が得られます。

DateTimeOffsetJon Skeet が私の回答のコメントで示唆したように、完全な日付と時刻の情報を取得して完全に変換できるようにするには、タイム ゾーン識別子を と共に保存する必要があります。

一方、特定のタイム ゾーンでデータを保存するのではなく、DateTimeOffset タイムゾーン全体の識別子をそのまま使用して、後でユーザー プロファイルまたはアプリケーション全体のタイム ゾーンに応じて必要なタイム ゾーンに変換し、 /またはアプリケーション層のカルチャ設定。

最後に、このオーバーロードDateTimeOffsetを使用して変換できます。TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo)

于 2013-03-15T06:57:52.810 に答える