2008-10-29 6 views
6

J'ai cela dans certains WSDL:Comment empêcher DateTime d'inclure le décalage de zone dans l'élément SOAP xsd: dateTime?

<element name="startDate" type="xsd:dateTime"/> 
<element name="endDate" type="xsd:dateTime"/> 

qui se traduit par le texte suivant dans l'enveloppe SOAP:

<startDate>2008-10-29T12:01:05</endDate> 
<endDate>2008-10-29T12:38:59.65625-04:00</endDate> 

Seulement quelques fois ont les millisecondes et le décalage horaire. Cela me cause un mal de tête parce que j'essaie d'obtenir une plage de 37 minutes et 54 secondes dans cet exemple, mais à cause du décalage je me retrouve avec 4 heures, 37 minutes, 54,65625 secondes. Est-ce une sorte d'erreur d'arrondi dans DateTime? Comment puis-je empêcher cela?

Répondre

4

Je suspecte que votre valeur endDate a la propriété Kind définie sur DateTimeKind.Local.

Vous pouvez modifier ce DateTimeKind.Unspecified comme suit:

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

après quoi je crois qu'il sera sérialisé sans le décalage horaire.

Notez que vous obtiendrez un DateTime avec DateTimeKind.Local si vous l'avez initialisé en utilisant DateTime.Now ou DateTime.Today et DateTimeKind.Utc si vous l'avez initialisé en utilisant Datetime.UtcNow.

+0

cela a résolu mon problème parfaitement sans avoir besoin de modifier un code côté serveur – snowCrabs

1

Qu'est-ce que vous utilisez pour générer la date? Si vous construisez ce code XML dans votre code plutôt que d'utiliser un sérialiseur (WCF ou XmlSerializer), vous pouvez utiliser System.Xml.XmlConvert pour générer et interpréter la date comme suit:

Pour créer la chaîne à placer dans le fichier XML:

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

Pour obtenir la date de la XML:

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

Si vous commencez avec deux instances de DateTime qui diffèrent par 37 minutes et 54 secondes avant de les pousser dans XML, ils diffèrent encore de 37 minutes et 54 secondes après les avoir retirés du fichier XML.