.net - significa - ¿Cómo evito que DateTime incluya el desplazamiento de zona en el elemento SOAP xsd: dateTime?
xsd nillable definition (2)
¿Qué estás usando para generar la fecha? Si está construyendo este XML en su código en lugar de usar un serializador (WCF o XmlSerializer), puede usar System.Xml.XmlConvert para generar e interpretar la fecha de la siguiente manera:
Para crear la cadena para poner en el XML:
DateTime startDate = DateTime.Now;
string startDateString = System.Xml.XmlConvert.ToString(startDate);
Para obtener la fecha del XML:
DateTime startDateFromXml = System.Xml.XmlConvert.ToDateTime(startDateString);
Si comienza con dos instancias DateTime que difieren en 37 minutos y 54 segundos antes de insertarlas en XML, seguirán siendo diferentes en 37 minutos y 54 segundos después de que las saque del XML.
Tengo esto en algunos WSDL:
<element name="startDate" type="xsd:dateTime"/>
<element name="endDate" type="xsd:dateTime"/>
Lo que da como resultado el siguiente texto en el sobre SOAP:
<startDate>2008-10-29T12:01:05</endDate>
<endDate>2008-10-29T12:38:59.65625-04:00</endDate>
Solo algunas veces tienen los milisegundos y el desplazamiento de zona. Esto me causa dolor de cabeza porque estoy tratando de obtener un rango de 37 minutos y 54 segundos en este ejemplo, pero debido a la compensación, termino con 4 horas, 37 minutos, 54.65625 segundos. ¿Es esto algún tipo de error de redondeo en DateTime? ¿Cómo evito que esto suceda?
Sospecho que su valor de endDate tiene la propiedad Kind configurada en DateTimeKind.Local.
Puede cambiar esto a DateTimeKind. No especificado de la siguiente manera:
endDate = DateTime.SpecifyKind(endDate, DateTimeKind.Unspecified)
después de lo cual creo que se serializará sin el desplazamiento de la zona horaria.
Tenga en cuenta que obtendrá un DateTime con DateTimeKind.Local si lo ha inicializado usando DateTime.Now o DateTime.Today, y DateTimeKind.Utc si lo ha inicializado usando Datetime.UtcNow.