web-dev-qa-db-ja.com

.NET WCFアプリケーションでタイムゾーンをどのように処理する必要がありますか?

当社はSaaSアプリケーションを実行しており、ユーザーは世界中からログインします(ほとんどが米国にあります)。すべての時間関連情報をUTCとして保存しますが、現地時間を使用して時間を表示する必要がありますアプリケーションはWebベースであり、JavaScriptを使用して1年のさまざまな時間帯のUTCオフセットを決定することにより、ユーザーのタイムゾーンを「自動検出」します。ユーザーのオフセット情報は、最初のリクエストでサーバーに渡されますサーバーは、認識しているすべてのタイムゾーンを検索し、一致する有効なタイムゾーンを確認します。

組み込みのTimeZoneInfoオブジェクトを使用したいのですが、

TimeZoneInfo.GetSystemTimeZones();

サーバーのレジストリ設定に依存します。現在、WCFサービスレイヤーをホストする18台の負荷分散されたWebサーバーがあり、私はbelieve TechOpsチームは、すべてのサーバーが常に同じサービスパックでパッチされていることを確認しています。

また、米国のさまざまなタイムゾーン、特に太平洋、山岳、中部、東部にも特に注意を払う必要があります。文字列ベースのIdフィールドはnotがすぐに変わると想定できますか?たとえば、私が電話した場合

TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")

適切なTimeZoneInfoオブジェクトが返されるようにしたい。

だからいくつかの質問:

  • 特に変更ルール(2006年に変更された米国のタイムゾーンルール)およびオフセットの決定に関して、タイムゾーンを処理するための最良の方法は何ですか。私は何か他のものを試すべきですか?製品チームはユーザーが自分のタイムゾーンを選択する必要がないことを望んでおり、特定の条件下でタイムゾーンが不正確に報告されても問題ないことを覚えておいてください(たとえば、ユーザーがメキシコにいる場合、「として報告されても問題ありません」より正確な「太平洋標準時(メキシコ)」ではなく「太平洋標準時」。
  • すべての負荷分散されたWebサーバーが常に同じOSバージョンとパッチレベルを実行していると想定すると、一貫した結果が得られると思いますか?
  • 他に検討する必要があることはありますか?
6
JackAce

組み込みのTimeZoneInfoクラスを使用して、順調に進んでいると思います。 IDは決して変更されるべきではありませんが、名前は変更されます(XPとVistaの間でいくつかが変更されたとき、私は難しいことを学びました)。私は実質的に同じアプローチ(サービスとデータベースレイヤーでのみUTC、Webサーバーとクライアントのローカル時間)を使用しましたが、うまく機能しました。

私が提案することの1つは、使用する予定のさまざまなTimeZoneInfoメソッドをインターフェイスITimeZoneConverterまたはそのような性質のものでラップすることです。これにより、後で実装を変更する必要がある場合は、より簡単になります。

ランダムな不快感:.Net TimeZoneInfoクラスは、タイムゾーンが与えられた場合に省略形を与えることができません。 IE:「東部標準時」の「EST」はないので、それが必要な場合は、そのためのなんらかのリソースファイルまたはテーブルへのルックアップを計画してください。

Javascriptは、実際にはタイムゾーンを通知することはできません。UTCからのタイムゾーンオフセットのみです。それは微妙な違いであり、あなたの場合それは重要ではないように聞こえますが、どのタイムゾーンがユーザーに割り当てられているかを見るとき、それは心に留めておくべきものです。

私はいくつかの このようなJSライブラリ を見てきました。これは、オフセットと最も多く設定されているタイムゾーンに基づいてクライアント側のタイムゾーンを推測しようとします。それは興味深いアプローチですが、それが本番環境でどれだけうまく機能するかはわかりません。

最後に、過去に私を悩ませたのは、JSONは実際には日時のフォーマット方法について何も指定していないということです。 ( 関連する読み方 )多くのajax/asyncリクエストを実行していて、utcとローカル時間の間で相互に変換するつもりである場合、これは苦痛になる可能性があります。一般的な構文解析/オフセット機能を作成し、チームの全員がそれらを認識していることを確認し、これらの問題を処理するたびにホイールを再発明しないようにしてください。

4
Brook

考慮すべきもう1つのこと:xSTとxDTには違いがあります。たとえば、アリゾナはMSTです。つまり、DSTに準拠していないため、冬は山に、夏は太平洋にいます。

1
Joe