.net 如何防止DateTime在SOAPXSD:DateTime元素中包含区域偏移量?

.net 如何防止DateTime在SOAPXSD:DateTime元素中包含区域偏移量?,.net,datetime,soap,.net,Datetime,Soap,我在一些WSDL中有这样的内容: <element name="startDate" type="xsd:dateTime"/> <element name="endDate" type="xsd:dateTime"/> 这将导致SOAP信封中出现以下文本: <startDate>2008-10-29T12:01:05</startDate> <endDat

我在一些WSDL中有这样的内容:

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

这将导致SOAP信封中出现以下文本:

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

只有某些时间具有毫秒和区域偏移量。这让我头疼,因为在本例中,我试图得到37分54秒的范围,但由于偏移量,我最终得到了4小时37分54.65625秒。这是DateTime中的某种舍入错误吗?如何防止这种情况发生?

您使用什么来生成日期?如果在代码中构建此XML而不是使用某种序列化程序(WCF或XmlSerializer),则可以使用System.XML.XmlConvert生成并解释日期,如下所示:

endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified)
要创建要放入XML的字符串,请执行以下操作:

DateTime startDate = DateTime.Now;
string startDateString = System.Xml.XmlConvert.ToString(startDate);
要从XML中获取日期,请执行以下操作:

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

如果在将两个DateTime实例推入XML之前先使用两个相差37分54秒的DateTime实例,那么在将它们从XML中拉出之后,它们仍然会相差37分54秒。

我怀疑endDate值的Kind属性设置为DateTimeKind.Local

您可以将其更改为DateTimeKind。未指定如下:

endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified)
在此之后,我相信它将被序列化而没有时区偏移


请注意,如果使用DateTime.Now或DateTime.Today初始化DateTimeKind.Local,您将获得带有DateTimeKind.Local的DateTime;如果使用DateTime.UtcNow初始化DateTimeKind.Utc,则将获得DateTimeKind.Utc。

这完美地解决了我的问题,无需修改任何服务器端代码