.Net дизайн приложений - PullRequest
0 голосов
/ 05 июля 2010

Мы создаем приложение с подробной информацией ниже.

1) Веб / настольное приложение на C # .Net

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

Нам нужно сохранить эту метку времени в формате UTC.

Теперь при отображении она будет преобразована в часовой пояс пользователя.

Задача

Пользователь может перемещаться из одного офиса в другой.(несколько офисов в разных часовых поясах).

Теперь давайте предположим, что мы хотим отображать активность пользователя в течение одного месяца.(Это могут быть разные часовые пояса).

Как мы можем хранить / отслеживать информацию о часовых поясах пользователей?

Чтобы преобразовать время во время выполнения и отобразить правильное время.

Например

UTC время

день1: время1

день2: время 2

UTC +1: 30

день 3: время3

и т.д ..

Можете ли вы подсказать, как можно решить эту проблему.

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 05 июля 2010

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

Если пользователь вводит его, вам необходимо преобразовать время ввода в UTC, прежде чем сохранять его.Эту настройку можно выбрать в настройках пользователя Culture / TimeZone.

При отображении ее пользователю вы устанавливаете информацию о культуре и TimeZone в теме в зависимости от того, где в мире находится пользователь.

Если вы не сохраняете часть даты в формате UTC в своей базе данных (даже если она в формате UTC), вы можете преобразовать ее в UTC следующим образом:

DateTime date = ..from db..;
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);

Для преобразования между часовыми поясамипроверить MSDN .

1 голос
/ 06 июля 2010
  1. Сохранение всех записей в базе данных с использованием myDate.ToUniversalTime ()
  2. При загрузке из базы данных с использованием myDate.ToLocalTime ()

Тогда ваши пользователи могут перемещаться сколько угодно.

0 голосов
/ 06 июля 2010

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

Если у вас есть ресурсы и вы достаточно смелы, вы всегда можете получить часовой пояс на основе IP-адреса компьютера, с которого они получают доступ к VPN-туннелю, хотя я даже не смог помочь вам в этом.

0 голосов
/ 05 июля 2010

Вы можете сохранить текущий часовой пояс (TimeZoneInfo.Local или TimeZone.CurrentTimeZone, они совпадают, но первый предпочтителен) вместе с вашими временными метками.

Я думаю, что пользователь должен изменить текущий часовой поясиз панели свойств часов Windows.

0 голосов
/ 05 июля 2010
System.Threading.Thread.CurrentThread.CurrentCulture

возвращает вам текущую информацию о культуре

...