代码之家  ›  专栏  ›  技术社区  ›  Joseph Bui

如何防止datetime在soap xsd:datetime元素中包含区域偏移量?

  •  6
  • Joseph Bui  · 技术社区  · 16 年前

    我在一些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秒。这是日期时间中的某种舍入错误吗?我如何防止这种情况发生?

    2 回复  |  直到 16 年前
        1
  •  4
  •   to StackOverflow    16 年前

    我怀疑您的enddate值的kind属性设置为datetimekind.local。

    您可以将此更改为datetimekind。未指定如下:

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

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

    请注意,如果使用datetime.now或datetime.today初始化了datetime.local,则将获得datetime.today和datetimekind.utc,如果使用datetime.utc now初始化了它。

        2
  •  1
  •   Dan Finucane    16 年前

    你用什么来生成日期?如果您在代码中构建此XML,而不是使用某个序列化程序(wcf或xml serializer),则可以使用System.xml.xmlconvert生成和解释日期,如下所示:

    要创建要放入XML的字符串,请执行以下操作:

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

    要从XML中获取日期,请执行以下操作:

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

    如果在将两个日期时间实例推送到XML之前,它们的差异分别为37分钟和54秒,那么在将它们从XML中拉出来之后,它们的差异仍然会分别为37分钟和54秒。