2

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

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

4

3 に答える 3

1

DateTimeインスタンス(構造体)がTimeZone情報を伝達しないというのは真実ではありません。.NET ... 3.0以降、各DateTime構造体にDateTimeKindプロパティがありますか?バージョンがわかりません。「種類」はUTC、ローカル、または不特定です。したがって、それ自体はTimeZoneではありませんが、時間がローカルゾーンまたはユニバーサルタイムゾーンのいずれかで表現されていることを示しています。詳細については、ドキュメントを確認してください。

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

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

于 2009-03-05T05:47:24.357 に答える
1

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

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

DateTime オブジェクトは暗黙的なタイムゾーンを保持しないため、Web サービスが現地時間を推測することを決定することは、論理的な欠陥になります (少なくともタイムゾーン基準をサポートしていない場合)。

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

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

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

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

于 2009-03-04T17:44:31.427 に答える
0

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

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

于 2009-03-03T19:25:25.390 に答える