2008-10-29 6 views
6

mam to w pewnym WSDL:Jak zapobiegać uwzględnianiu przesunięcia strefy w obiekcie SOAP xsd: dateTime?

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

co skutkuje w poniższym tekście w kopercie SOAP:

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

Tylko kilka razy zdarzyło milisekundy i strefa offsetowych. To powoduje ból głowy, ponieważ próbuję uzyskać w tym przykładzie zakres 37 minut i 54 sekund, ale z powodu przesunięcia kończę 4 godziny, 37 minut, 54.65625 sekund. Czy jest to jakiś błąd zaokrąglania w DateTime? Jak temu zapobiec?

Odpowiedz

4

Podejrzewam, że Twoja wartość endDate ma właściwość Kind ustawioną na DateTimeKind.Local.

można zmienić na DateTimeKind.Unspecified następująco:

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

po którym wierzę zostaną w odcinkach bez strefy czasowej.

Pamiętaj, że dostaniesz DateTime z DateTimeKind.Local, jeśli zainicjowałeś go używając DateTime.Now lub DateTime.Today i DateTimeKind.Utc, jeśli zainicjowałeś go używając Datetime.UtcNow.

+0

rozwiązało to mój problem idealnie, bez konieczności modyfikowania żadnego kodu servera – snowCrabs

1

Czego używasz do wygenerowania daty? Jeśli budujesz ten kod XML w kodzie, zamiast używać serializera (WCF lub XmlSerializer), możesz użyć System.Xml.XmlConvert, aby wygenerować i zinterpretować datę w następujący sposób:

Aby utworzyć ciąg znaków do wstawienia w XML:

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

Aby uzyskać datę z XML:

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

Jeśli zaczniesz z dwóch przypadkach DateTime, które różnią się przez 37 minut i 54 sekund przed wcisnąć je do XML nadal będą się różnić o 37 minut i 54 sekund po wyciągnięciu ich z pliku XML.

Powiązane problemy