6

我在一些 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>

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

4

2 回答 2

5

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

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

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

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

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

于 2008-10-30T08:13:53.150 回答
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 中,那么在您将它们从 XML 中拉出之后,它们仍然会相差 37 分 54 秒。

于 2008-10-29T19:28:07.907 回答