Дизайн приложения .Net

Мы делаем заявку с деталями ниже.

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

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

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

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

Проблема

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

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

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

Так что он преобразует время во время выполнения и отображает правильное время.

e.g.

время UTC

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

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

Всемирное координированное время +1:30

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

и т.д..

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

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


person Chitresh    schedule 05.07.2010    source источник


Ответы (5)


  1. Сохраните все записи в базе данных с помощью myDate.ToUniversalTime().
  2. При загрузке из базы данных с помощью myDate.ToLocalTime()

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

person jgauffin    schedule 06.07.2010
comment
Если сервер получает дату в указанном часовом поясе, то сохранение будет работать. Если сервер выполняет ToLocalTime(), то дата будет преобразована в локальное время сервера, а не клиента. Если вы не передадите настройки часового пояса от клиента и не установите в работающем потоке. - person Mikael Svenson; 07.07.2010

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

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

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

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

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

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

person Mikael Svenson    schedule 05.07.2010
comment
на самом деле, пользователи также входят в систему, используя VPN ... так что в этом случае фактический часовой пояс не будет отслеживаться ... и мне нужен дизайн приложения ... как мы должны хранить их и связать это ... чтобы мы могли получить фактическое время в любом один часовой пояс – - person Chitresh; 05.07.2010
comment
Пока часовой пояс правильный на рабочем столе пользователя (citrix или нет), вы можете использовать UtcNow для настольного приложения. Для веб-приложения проверьте articles.techrepublic.com.com/5100-10878_11-6016329 .html о том, как использовать javascript для получения текущего времени и временной зоны (и преобразования в UTC) и скопировать значение в поле, которое вы отправляете на сервер. - person Mikael Svenson; 05.07.2010

System.Threading.Thread.CurrentThread.CurrentCulture

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

person Serkan Hekimoglu    schedule 05.07.2010
comment
на самом деле, пользователи также входят в систему, используя VPN ... так что в этом случае фактический часовой пояс не будет отслеживаться ... и мне нужен дизайн приложения ... как мы должны хранить их и связать это ... чтобы мы могли получить фактическое время в любом один часовой пояс - person Chitresh; 05.07.2010

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

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

person munissor    schedule 05.07.2010

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

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

person Stephen Collins    schedule 06.07.2010