2008-10-29 62 views
6

我有這樣的一些WSDL:如何防止DateTime在SOAP xsd:dateTime元素中包含區域偏移量?

<element name="startDate" type="xsd:dateTime"/> 
<element name="endDate" type="xsd:dateTime"/> 

在下面的文本,這導致SOAP信封:

<startDate>2008-10-29T12:01:05</endDate> 
<endDate>2008-10-29T12:38:59.65625-04:00</endDate> 

只有部分時間有偏差的毫秒和區域。這讓我頭痛,因爲我試圖在這個例子中得到37分54秒的範圍,但是由於偏移,我最終得到了4小時37分54.65625秒。這是DateTime中的某種舍入錯誤嗎?我如何防止這種情況發生?

回答

4

我懷疑你的endDate值的Kind屬性設置爲DateTimeKind.Local。

endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified) 

之後,我相信它會沒有區偏移被序列化:

如下,您可以將其更改爲DateTimeKind.Unspecified。

請注意,如果您使用DateTime.Now或DateTime.Today初始化DateTimeKind.Local,並且使用Datetime.UtcNow初始化DateTimeKind.Utc,那麼您將得到帶有DateTimeKind.Local的DateTime。

+0

這完全解決了我的問題,無需修改任何服務器端代碼 – snowCrabs 2014-11-24 18:03:12

1

你用什麼來生成日期?如果您在代碼中構建此XML而不是使用某些序列化程序(WCF或XmlSerializer),則可以使用System.Xml.XmlConvert生成並解釋日期,如下所示:

創建要放入XML的字符串:

DateTime startDate = DateTime.Now; 
string startDateString = System.Xml.XmlConvert.ToString(startDate); 

來獲得日期了XML的:

DateTime startDateFromXml = System.Xml.XmlConvert.ToDateTime(startDateString); 

如果您從一個37分54秒不同的兩種DateTime的情況下,你把他們之前爲XML,他們仍然會通過37不同分鐘和54秒後,將它們從XML中拉出。

相關問題