我在一些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中的某种舍入错误吗?我该如何防止这种情况发生?
答案 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秒的差异。