2009-03-03 86 views
2

我有一個帶有日期時間參數的方法的Web服務(實際上是Silverlight啓用wcf服務,但對於所有意圖和目的,它是一個Web服務)。該方法從客戶端調用,該客戶端可能位於不同的時區。託管Web服務的服務位於太平洋標準時間,並且Web服務正在將日期時間值轉換爲服務器時區。 Web服務的目的是將日期時間值與數據庫中的值進行比較,但數據庫中的值基於客戶端時區,所以由於轉換,比較不起作用。.NET Web服務中的日期時間時區轉換

有什麼辦法可以關閉轉換嗎?

回答

1

並且它顯示Web服務正在將日期時間值轉換爲服務器時區。

我想確保我有這個正確的:你的Web服務方法需要一個DateTime類型的參數(如在System.DateTime中)並且正在轉換傳遞的參數?

datetime對象不攜帶隱時區,所以任何決定由Web服務來推斷本地時間將是一個邏輯漏洞(至少不支持時區標準)。

如果您可以提供您的服務器和客戶端代碼片段,它會使該場景更易於診斷。

更新:不知道這種情況是準確的,那麼請澄清:

  • 客戶端提交與'12 DateTime值請求:00下午12時00分00秒CST」
  • 服務器:00 PST在'10:00:00 00:00:00 PM PST'收到/解釋請求'

如果是這樣,您可以將所有數據轉換爲UTC時間嗎?如果您正在執行查詢查詢,這意味着將存儲的數據轉換爲UTC。

+0

當日期時間序列化時,它的格式包括時區信息。 – Jeremy 2009-03-04 19:48:33

1

不完全正確,DateTime實例(結構)不帶TimeZone信息。每個DateTime結構上有一個DateTimeKind屬性,從.NET ... 3.0開始?我不知道版本。 「Kind」是UTC,Local或Unspecified。所以雖然它本身不是一個時區,但它是時間在本地區域或在通用時區中表達的一種行爲。查看文檔以獲取更多信息。

要回答原始問題 - 將所有人轉換爲單個標準時區。 UTC工作得很好,而且很容易,因爲BCL內置了一些方法,但是選擇什麼時區並不重要。讓每個人都同意一個標準。

您可以做的另一件事是將時間值作爲「TotalSeconds」值傳輸,因爲...過去的某個特定時間。像1970年1月1日(unix time_t)或1601年1月1日(windows FILETIME)。但這種方法隱含的是,所有合作方都同意,這個開始時間點是UTC。因此,從一開始(「時代」)開始的一百萬秒就是指我在埃爾帕索或納舒厄或東京或倫敦的同一時刻。