ASP.NET / SQL Server - установка часового пояса - PullRequest
1 голос
/ 27 октября 2011

У нас есть веб-сайт ASP.NET и база данных SQL, размещенная в США. Всякий раз, когда я использую функцию Now() в VB.NET и getdate() в SQL, я получаю текущее время США. Проблема в том, что клиент находится на Филиппинах, который находится в часовом поясе GMT ​​+ 8. У меня вопрос, есть ли способ установить часовой пояс конкретной базы данных и веб-сайта, чтобы при использовании функций я получал текущее время на Филиппинах? Как вы справляетесь с этим? В максимально возможной степени мы не хотим делать вычитание или сложение с датой результата выполнения функций, поскольку в будущем клиенты будут из другой страны. Если мы сделаем это, у нас будет головная боль при обновлении кодов.

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

1 Ответ

3 голосов
/ 27 октября 2011

Учитывая, что ваши клиенты могут находиться в разных часовых поясах, вы должны хранить часовой пояс для клиентов, который они (или вы) могут установить в качестве предпочтения для своей учетной записи.Сохраните все даты + время как UTC, а затем преобразуйте их в часовой пояс при отображении результатов в вашем интерфейсе.

Этот вопрос уже был в значительной степени решен в следующем вопросе: Как работать со временемзоны в ASP.NET?

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

  1. У вас есть переменная уровня сеанса, которая содержит смещение часового пояса клиента?Если нет, создайте его.

  2. Создайте небольшой вспомогательный класс даты и времени.

  3. В служебном классе предоставьте 3 метода для: (1) получить текущую дату / время (смещение часового пояса клиента) (2) передать в базу данных дату / время, чтобы вернуть смещение времени для TZ клиента.(3) пройти время от клиента, чтобы вычесть разницу TZ клиента.

Вам придется вносить изменения в код, но вы, вероятно, можете использовать эти служебные функции, чтобы обернуть входы и выходы повсюду, централизуя логику.У Microsoft есть страница о неправильных действиях, которые следует избегать при использовании класса DateTime и манипулировании часовыми поясами: http://msdn.microsoft.com/en-us/library/ms973825.aspx#datetime_topic1a

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