Отображение данных DateTime в пользовательских часовых поясах в DataTable - PullRequest
3 голосов
/ 20 мая 2009

У нас есть приложение для составления отчетов, в котором все DateTimes хранятся в базе данных UTC (SQL Server 2005)

Приложение для создания отчетов работает просто путем извлечения DataTable и привязки к DataGrid, отображающему информацию.

Если нам известен часовой пояс пользователей, вошедших в систему (например, +3 GMT), есть ли способ обновить даты в таблицах данных в формате UTC, чтобы теперь отображать их в часовом поясе пользователей?

Мы знаем, что можем буферизовать каждый столбец / строку в DataTable и выполнить преобразование, но есть ли лучший, более эффективный способ?

Ответы [ 2 ]

0 голосов
/ 20 мая 2009

Если вы используете .NET, есть встроенный класс, созданный специально для этой цели. TimeZoneInfo (http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx) как взято из статьи:

Объект TimeZoneInfo может представлять любой часовой пояс, а методы класса TimeZoneInfo могут использоваться для преобразования времени в одном часовом поясе в соответствующее время в любом другом часовом поясе. Члены класса TimeZoneInfo поддерживают следующие операции:

  • Получение часового пояса, который уже определен операционной системой.
  • Перечисление часовых поясов, доступных в системе.
  • Преобразование времени между разными часовыми поясами.
  • Создание нового часового пояса, который еще не определен операционной системой.
  • Сериализация часового пояса для последующего извлечения.

Надеюсь, это поможет.

0 голосов
/ 20 мая 2009

Я бы изменил время, отображаемое пользователю. Следите за тем, чтобы он был согласованным, а также сохраняйте часовой пояс, а затем изменяйте пользовательский интерфейс, чтобы отображать правильное местное время. Например, если их часовой пояс - центральное стандартное время, вы можете использовать что-то похожее на следующий код:

SomeDataObject someDataObject = new SomeDataObject();

someDataObject.TimeZone = -5; //UTC Timezone for Central Standard Time
someDataObject.Time = DateTime.Now;

DateTime someTime = someDataObject.Time;
someTime.Add(someDataObject.TimeZone); // Display this back to the user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...