включить работу с разными часовыми поясами - PullRequest
1 голос
/ 17 мая 2011

У меня есть приложение asp.net + c #, которое использует System.DateTime.now для регистрации рабочего времени сотрудников. приложение находится в сети, и недавно к нему подключились пользователи из-за пределов моей страны.

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

Все даты и часы, которые задокументированы в БД, не являются универсальным временем, поэтому я не хочу пытаться изменить все обратно на UTC (я также думаю, что это не применимо).

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

Это правильный путь? Какова лучшая практика для этого? 10q очень много.

Ответы [ 2 ]

0 голосов
/ 17 мая 2011

Хранение DateTimes в UTC, безусловно, лучшая практика в моей книге.Преобразование существующих данных может потребовать значительных усилий, но в долгосрочной перспективе это будет стоить того, если у вас уже есть несколько пользователей в разных часовых поясах (сегодня два, но скоро это может быть три, четыре....) Это также поможет избежать проблем, связанных с такими вещами, как переход на летнее время, особенно если группы находятся в регионах, где начало и конец перехода на летнее время различны, как в случае между США и Великобританией.(Мне приходится иметь дело с этими проблемами DateTime в моей системе).

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

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

Будет очень легко пропустить конверсии теперь, когда вы 'добавляем новый часовой пояс.Я бы порекомендовал убедиться, что вся ваша логика DateTime централизована (методы расширения или вспомогательный класс, в зависимости от версии вашей платформы).Храните все свои преобразования и форматирование строк в одном месте и убедитесь, что весь ваш код ссылается на него.

Удачи, и напишите множество юнит-тестов вокруг ваших преобразований.

0 голосов
/ 17 мая 2011

Я думаю, что ваш подход к определению часовых поясов для группы пользователей имеет большой смысл.Вы часто обнаружите, что на настольных ПК у людей неправильный часовой пояс, что добавляет еще одну сложность.Если вы установите это явно, вы в безопасности.

Я бы настоятельно рекомендовал вам использовать UTC в вашей базе данных.Если вы начнете смешивать DateTimes из разных часовых поясов в одной и той же базе данных, это снова вас укусит!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...