質問

日時パラメーターを受け取るメソッドを持つWebサービス(実際はSilverlightがWCFサービスを有効にしますが、すべての意図と目的のために、Webサービスです)があります。メソッドはクライアントから呼び出されますが、クライアントは別のタイムゾーンにある可能性があります。 Webサービスをホストするサービスは太平洋標準時であり、Webサービスは日付の値をサーバーのタイムゾーンに変換しているようです。 Webサービスの目的は、日時の値をデータベースの値と比較することですが、データベースの値はクライアントのタイムゾーンに基づいているため、変換のため、比較は機能しません。

変換をオフにする方法はありますか

役に立ちましたか?

解決

  

そして、Webサービスが日時の値をサーバーのタイムゾーンに変換しているように見えます。

これが正しいことを確認しようとしています:WebサービスメソッドはDateTime型のパラメーター(System.DateTimeなど)を受け取り、渡されたパラメーターを変換していますか?

DateTimeオブジェクトには暗黙のタイムゾーンが含まれないため、Webサービスがローカル時間を推測する決定は論理的な欠陥になります(少なくともタイムゾーン条件をサポートしていません)。

サーバーとクライアントのコードスニペットを提供できれば、シナリオの診断が容易になります。

更新:このシナリオが正確かどうかわからないため、明確にしてください:

  • クライアントは、DateTime値を「12:00:00 00:00:00 PM CST」としてリクエストを送信します
  • PSTのサーバーは、'10:00:00 00:00:00 PM PST 'にリクエストを受信/解釈します

この場合、すべてのデータをUTC時間に変換できますか?クエリルックアップを実行している場合、これは保存されたデータもUTCに変換することを意味します。

他のヒント

DateTimeインスタンス(構造体)がTimeZone情報を運んでいないということはまったくありません。 .NETの時点で、各DateTime構造体に DateTimeKind プロパティがあります。 ... 3.0?バージョンがわかりません。 「種類」 UTC、ローカル、または未指定です。それ自体はTimeZoneではありませんが、時刻はローカルゾーンまたは世界時で表現されることを示しています。詳細については、ドキュメントを確認してください。

元の質問に答えるには、全員を単一の標準タイムゾーンに変換します。 UTCは正常に機能し、BCLに組み込まれたメソッドがあるため簡単です。ただし、選択するタイムゾーンは実際には関係ありません。みんなに基準に同意してもらいましょう。

もう1つできることは、時間の値を「TotalSeconds」として送信することです。過去の特定の時間以降の値。 1970年1月1日(unix time_t)または1601年1月1日(windows FILETIME)のように。しかし、このアプローチで暗黙的であるのは、すべての協力関係者がこの開始時点がUTCであることに同意することです。したがって、開始から100万秒(「エポック」)は、私がエルパソ、ナシュア、東京、ロンドンのどこにいても同じ瞬間を指します。

この質問をチェックしてください。あなたが望むものについての議論があります。

最も簡単な方法は、webmethodでクライアントのタイムゾーンを渡すか、DateTimeではなく文字列として全体の時間を渡すことです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top