2009-03-03 17 views
2

Webサービス(実際にはSilverlight対応のwcfサービスですが、すべての目的と目的で、Webサービスです)にdatetimeパラメータを取得するメソッドがあります。このメソッドは、異なるタイムゾーンにあるクライアントから呼び出されます。 Webサービスをホストするサービスは太平洋標準時にあり、Webサービスが日付時刻の値をサーバーの時間帯に変換しているようです。 Webサービスの目的は、datetime値をデータベースの値と比較することですが、データベースの値はクライアントのタイムゾーンに基づいているため、変換のために比較が機能しません。.net Webサービスでのdatetimeタイムゾーンの変換

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

答えて

1

として全体の時間を渡すように見えますWebサービスが日付時刻の値をサーバーのタイムゾーンに変換しているようです。

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

DateTimeオブジェクトは、暗黙的なタイムゾーンを運ばないので、現地時間を推測するために、Webサービスによって任意の決意は、論理上の欠陥だろう(少なくともタイムゾーンの基準を支援せず。)

をご使用のサーバーを供給することができた場合とクライアントコードスニペットを使用すると、シナリオを診断しやすくなります。

UPDATE:このシナリオが正確であるかどうかわからないので、明確にしてください:00:00午前0時00分00秒PM CST」

  • Serverの

    • クライアントは、'12のDateTime値を要求提出しますPSTは'10:00:00 00:00:00 PM PST 'でリクエストを受信/解釈します。

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

  • +0

    日付時刻をシリアル化すると、その形式にタイムゾーン情報が含まれます。 – Jeremy

    +0

    申し訳ありませんが、誤解されていました。サービスがWCF内部ではなく値を変換しているかのように聞こえました。 – jro

    +0

    私はこれをしなければならないでしょう。 datetimesをデータベースにutcとして格納し、Webサービスを呼び出す前にクライアント値をutcに変換します。 – Jeremy

    0

    この質問をチェックすると、あなたが何を望んでいるのかについての議論があります。

    最も簡単な方法は、WebMethod属性に、同様のクライアントのタイムゾーンを通過させることである、または単なる文字列ではなく、DateTimeの

    1

    DateTimeインスタンス(構造体)にTimeZone情報が含まれていないことは間違いありません。 .NETのように各DateTime構造体にDateTimeKindプロパティがあります... 3.0?私はバージョンを知らない。 「種類」はUTC、ローカル、または未指定です。タイムゾーンそのものではありませんが、時間はローカルゾーンか普遍的なタイムゾーンのどちらかで表現されています。詳細については、ドキュメントをチェックしてください。

    元の質問に答えるために - 単一の標準timezoneeに皆を変換します。 UTCはうまく動作し、BCLに組み込まれているメソッドがあるので簡単ですが、選択するタイムゾーンは実際には問題になりません。誰もが標準に同意するようにしてください。あなたが行うことができます

    もう一つは、「TotalSeconds」値として時間値を送信するので...過去のある特定の時間です。 Jan 1 1970(unix time_t)、Jan 1 1601(windows FILETIME)のように。しかし、このアプローチでは暗黙のうちに、すべての協力関係者が、この開始時点がUTCであることに同意するということです。だから、私がエルパソ、ナシュア、東京、ロンドンにいても、初めから100万秒(「時代」)の同じ瞬間を指しています。

    関連する問題