如何防止DateTime在SOAP xsd:dateTime元素中包含区域偏移?

时间:2008-10-29 18:53:48

标签: .net datetime soap

我在一些WSDL中有这个:

<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中的某种舍入错误吗?我该如何防止这种情况发生?

2 个答案:

答案 0 :(得分:4)

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

您可以将此更改为DateTimeKind.Unspecified,如下所示:

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

之后我相信它会在没有时区偏移的情况下被序列化。

请注意,如果使用DateTime.Now或DateTime.Today初始化它,则会获得DateTimeKind.Local;如果使用Datetime.UtcNow初始化了DateTimeKind.Utc,则会获得DateTimeKind.Utc。

答案 1 :(得分: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);

如果从两个DateTime实例开始,这些实例在将它们推入XML之前相差37分54秒,那么在将它们从XML中拉出后,它们仍然会有37分54秒的差异。