Как запретить DateTime включать смещение зоны в элемент SOAP xsd: dateTime? - PullRequest
6 голосов
/ 29 октября 2008

У меня есть это в некоторых 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 секунды. Это какая-то ошибка округления в DateTime? Как я могу предотвратить это?

Ответы [ 2 ]

4 голосов
/ 30 октября 2008

Я подозреваю, что у вашего значения endDate свойство Kind установлено в DateTimeKind.Local.

Вы можете изменить это на DateTimeKind.Unspecified следующим образом:

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

после чего я верю, что он будет сериализован без смещения часового пояса.

Обратите внимание, что вы получите DateTime с DateTimeKind.Local, если вы инициализировали его с помощью DateTime.Now или DateTime.Today, и DateTimeKind.Utc, если вы инициализировали его с помощью Datetime.UtcNow.

1 голос
/ 29 октября 2008

Что вы используете для создания даты? Если вы строите этот XML в своем коде, а не с помощью какого-либо сериализатора (WCF или XmlSerializer), вы можете использовать System.Xml.XmlConvert для генерации и интерпретации даты следующим образом:

Чтобы создать строку для вставки в XML:

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

Чтобы получить дату из XML:

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

Если вы начнете с двух экземпляров DateTime, которые отличаются на 37 минут и 54 секунды, прежде чем вы вставите их в XML, они все равно будут отличаться на 37 минут и 54 секунды после того, как вы извлечете их из XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...