Comment puis-je empêcher DateTime d'inclure la zone de décalage dans SOAP xsd: element dateTime?

voix
6

Je présente dans certains WSDL:

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

Ce 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>

Seules quelques fois ont les millisecondes et le décalage horaire. Cela me fait un mal de tête parce que je suis en train d'obtenir une gamme de 37 minutes et 54 secondes dans cet exemple, mais à cause du décalage je finis avec 4 heures, 37 minutes, 54.65625 secondes. Est-ce une sorte d'erreur d'arrondi DateTime? Comment puis-je éviter que cela se produise?

Créé 29/10/2008 à 17:53
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
1

Qu'est-ce que vous utilisez pour générer la date? Si vous construisez ce XML dans votre code plutôt que d'utiliser certains 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 à mettre 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 vont différer encore de 37 minutes et 54 secondes après que vous les retirez du XML.

Créé 29/10/2008 à 18:28
source utilisateur

voix
4

Je soupçonne que la valeur de votre endDate a la propriété kind est définie sur DateTimeKind.Local.

Vous pouvez changer cela DateTimeKind.Unspecified comme suit:

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

après quoi je crois que ce sera sérialisé sans le décalage horaire.

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

Créé 30/10/2008 à 07:13
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more