2010-05-30 22 views
3

我正在開發在位於中央時區的系統上執行的C#.Net應用程序。應用程序使用它們提供的API從第三方獲取信息。我已經使用WSDL生成我的應用程序訪問該API的代碼...他們的報告API允許您爲報告定義開始日期和結束日期。這些是C#DateTime字段和XSD:dateTime。現在,當我設置開始日期和結束日期並允許API創建SOAP消息時,日期並不總是包含時區,除非我使用ToLocalTime方法設置日期字段;但是,該方法將在中央時區(CST)中創建日期時間字段,但我需要讓它在太平洋時區(PST)中創建這些字段。如果我將我的機器時間設置爲PST,那麼一切都很好......但當然這會導致其他時間問題。我可以使用什麼方法來控制DateTime的格式?或者,是否有可以在C#中設置的應用程序設置,允許時區控制?如何控制System.Xml.Serialization中或應用程序執行期間的時區格式?

+0

您是否曾經找到過解決方案? – 2011-01-28 01:44:03

+0

對ToLocalTime方法投票贊成將時區序列化爲SOAP消息。保存了我的一天...更像一週。 – 2013-09-23 01:35:45

回答

0

我想你可以通過使用System.TimeZoneInfo來實現這一點。例如:

TimeZoneInfo.ConvertTime(myLocalTime, TimeZoneInfo.FindSystemTimeZoneById(「Pacific Standard Time」)); 
+0

嘗試對WSDL生成的類的日期時間字段進行賦值時發生此問題的變化---我必須記錄SOAP消息才能查看發送的內容......唯一的情況是時區是在使用ToLocalTime方法時 - 使用應用程序正在執行的機器的時區。 – Beal 2010-05-30 22:30:42

0

我想你有兩個選擇。顯然你可以做什麼取決於目標系統如何處理它接收的日期時間。

1-將日期時間轉換爲目標時區併發送沒有時區信息的請求。這將假定目標系統將接受沒有時區信息的日期時間作爲PST時區。

2-更改爲使用DateTimeOffset。這將允許您明確指定時區偏移量,並將與您指定的時區信息一起序列化。

如果可能,我會選擇2.

+0

我也試過DateTimeOffset,我真的很喜歡...但WSDL生成的類有數據元素類型爲DateTime ....我永遠不會得到使用DateTimeOffset的變體有時區....是你暗示我修改了由WSDL生成的類? – Beal 2010-05-30 22:34:18

+0

@Beal,我想你需要改變生成的類,我意識到這是可怕的做法,我個人會盡量避免它。但至少試着去看看它是否有效,那麼如果我們在正確的軌道上,我們可以看到是否有更好的方法來處理這個問題。 – 2010-05-31 17:44:19

+0

試圖修改生成的類...這會導致與提供程序(雅虎EWS)的錯誤...試圖找出另一個替代方案.... – Beal 2010-06-07 19:46:13

相關問題