Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[54.225.1.66] |
|
Сообщ.
#1
,
|
|
|
Друзья!
Вот какой вопрос. Веб метод возвращает DataTable с двумя MSSQL полями DateTime. Если смотреть на вывод со стороны сервиса, то получаются следующие значения: From:25.10.2008 0:00:00, To: 26.10.2008 23:00:00 При получении их на клиенте имеем: From:24.10.2008 23:00:00, To: 26.10.2008 23:00:00 В XML, кот. отдает сервис вот такие строки <Table diffgr:id="Table1" msdata:rowOrder="0"> <С>2008-10-25T00:00:00+05:00</С> <По>2008-10-26T23:00:00+04:00</По> </Table> Почему это может быть? Винда на сервере английская с русским языком по умолчанию На клиенте русская XP SP3. Такое чувство, что что-то с часовыми поясами или временем UTC. |
Сообщ.
#2
,
|
|
|
В полях есть свойства DateTimeMode, вот его надо правильно выставить.
|
Сообщ.
#3
,
|
|
|
Может быть Kind? Уже игрался.
При передаче из сервиса Mode1: Unspecified, Mode2: Unspecified При приеме на клиенте то же самое. Что выставлять? Добавлено Итак. На клиенте DTNewRasp.Columns.Clear(); DTNewRasp.Columns.Add(new DataColumn("С", Type.GetType("System.DateTime"))); DTNewRasp.Columns.Add(new DataColumn("По", Type.GetType("System.DateTime"))); DTNewRasp.Columns[0].DateTimeMode = DataSetDateTime.Local; DTNewRasp.Columns[1].DateTimeMode = DataSetDateTime.Local; DTNewRasp = service.ПолучитьРасписание(TNumber, DateFrom, DateTo); После вызова метода обе колонки имеют режим UnspecifiedLocal. Править свойство DateTimeMode можно только когда таблица не имеет данных. Править на сервере перед отправкой не бред? |
Сообщ.
#4
,
|
|
|
А где вы выставляли Unspecified ? И зачем на клиенте Local ставите?
Везде должно быть Unspecified. Тогда смещения не будет. Добавлено Собственно а зачем вообще на клиенте таблицу создаете? Это лишнее. |
Сообщ.
#5
,
|
|
|
Я решил пойти обходным путем.
Все эти манипуляции ни к чему хорошему не привели. Получаю на сервере DataTable, преобразую полученный DateTime в long методом ToBinary() и в этом виде передаю клиенту. На клиенте из long получаю DateTime и это ровно те же значения что были на сервере перед отправкой. Или нужно какие-то манипуляции с таблицей делать перед отправкой из сервиса? |
Сообщ.
#6
,
|
|
|
В сервисе поле должно быть как Unspecified вот и все манипуляции.
А все ваши манипуляции с созданием таблицы на клиенте и попытки управлять свойствами этих ненужных сущностей от лукавого. |
Сообщ.
#7
,
|
|
|
После вызова в сервисе DataAdapter.Fill(dt)
поля в dt имеют тип UnspecifiedLocal! В этом случае сериализация вызывает СМЕЩЕНИЕ. Если, как Вы пишите тип указан как Unspecified, то при сериализации смещения не происходит. Но вот как его указать? Что сделал. Создал перед вызовом метода Fill таблицу с 2 колонками руками внутри сервиса. Указал DateTimeMode = DataSetDateTime.Unspecified для обоих колонок. Вызвал Fill. Вернул получившуюся таблицу клиенту. Даты появились как надо. |
Сообщ.
#8
,
|
|
|
В дизайнере, например.
Добавлено Таблицы надо делать и настраивать заранее, в быстром мелком тесте - еще куда ни шло, можно и не создавать, а в боевых условиях за такое ноги отрывают, и по самы уши. |