DataSet.Locale, что он делает? - PullRequest
2 голосов
/ 09 января 2009

Может кто-нибудь подскажет, что такое использование DataSet.Locale и можно ли его использовать для решения этой проблемы.

Мой сервер находится в США, и я выполняю запрос к нему. Данные, содержащиеся в таблице как на удаленном сервере (U.S), так и на локальном, совпадают.

Проблема в том, что я получаю DataSet с помощью WebService с удаленного сервера. Столбец Даты показывает предыдущую дату. Например, в столбце «Дата» указано «14 января 2007 г.», но при извлечении отображается «13 января 2007 г.».

Я не могу определить причину, так как все работает нормально.

Ответы [ 3 ]

1 голос
/ 09 января 2009

Похоже, известная проблема TimeZone: изменение DataSet.Locale не поможет.

Для получения дополнительной информации см. Следующую статью базы знаний: http://support.microsoft.com/kb/842545.

Также обратите внимание на свойство DataColumn.DateTimeMode, которое управляет форматом сериализации столбца DateTime. Установка его в DataSetDateTime.Unspecified гарантирует, что при сериализации не будет добавлено смещение.

1 голос
/ 10 января 2009

Вероятно, вы видите проблему, если временная часть типа DateTime равна 12:00:00. Если это значение (14 января 2007 г., 12:00) будет отправлено в EST, оно будет смещено при перемещении по западным часовым поясам (т. Е. 13 января 2007 г., 23:00 в CST)

Лучший способ избежать этого - убедиться, что вы храните данные DateTime в инвариантном типе (преобразуйте их в UTC или по Гринвичу). Затем, когда вы добираетесь до того, что потребителю нужны данные, они могут изменить данные в представление, зависящее от локали. Если вы не можете контролировать, как данные сохраняются, просто убедитесь, что вы преобразовываете их в инвариантный тип по мере извлечения, прежде чем вернуть его клиенту.

Ссылка, на которую ссылается @Joe, полезна, в противном случае приведен довольно большой технический документ с подробным описанием передовых методов решения этой проблемы.

http://msdn.microsoft.com/en-us/library/ms973825.aspx

Вот переполнение стека Q'n'A, касающееся также некоторых новых технологий.

Лучшие практики для сериализации DateTime в .NET 3.5

Примечание: в первой ссылке, которую я добавил, есть интересный момент о сериализации некоторых из этих типов дат в зависимости от того, используете ли вы стеки 1.1 / 2.0. Обратите на это внимание, так как он укусил меня пару раз; -)

0 голосов
/ 09 января 2009

Свойство используется для определения языкового стандарта, который будет использовать набор данных при сравнении строк в нем.

Для получения дополнительной информации см. Справочную страницу MSDN здесь .

РЕДАКТИРОВАТЬ: Просто в связи с вашей проблемой: где находится «локальный» компьютер? Вы случайно не пересекаете строку даты на сервере?

...