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

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

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

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

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

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

Проблема

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

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

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

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

e.g.

время UTC

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

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

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

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

и т.д..

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

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


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


Ответы (5)


arrow_upward
1
arrow_downward

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

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

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

arrow_upward
4
arrow_downward

Если вы используете 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

arrow_upward
0
arrow_downward

System.Threading.Thread.CurrentThread.CurrentCulture

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

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

arrow_upward
0
arrow_downward

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

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

person munissor    schedule 05.07.2010

arrow_upward
0
arrow_downward

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

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

person Stephen Collins    schedule 06.07.2010