Поиск часового пояса и культуры клиента через веб-сервис - PullRequest
2 голосов
/ 19 июня 2009

У меня есть веб-сервис .NET.

Он обслуживает запросы AJAX от пользователей сети.

Я просто хотел бы знать, как автоматически получить часовой пояс пользователя ... Не смещение текущего времени, а фактический часовой пояс, например, Центральное стандартное время, сейчас равно -5: 00, но восточное стандартное время будет -5 : 00 раз, когда летнее время закончилось. Я хочу дифференцировать этих пользователей.

Я также хотел бы знать, как получить их настройки культуры ("en-US" и т. Д.), Чтобы я мог отображать даты и время из моего веб-сервиса в соответствии с их конкретными предпочтениями.

Подойдет любое решение Javascript или .NET. Спасибо.

Примечание: запрос пользователя будет полным последним средством, поскольку это веб-сервис.

Ответы [ 3 ]

1 голос
/ 19 июня 2009

Если ваши клиенты подключаются к веб-сервису из браузера, вы можете использовать Request.Headers ["Accept-Language"] для определения настроек культуры браузера. Невозможно получить часовой пояс непосредственно с сервера, вам нужно JavaScript на клиенте, чтобы вычислить разницу во времени между их местными часами и временем по Гринвичу.

Если ваш веб-сервис используется по-разному (т. Е. Не из браузера), вам необходимо добавить эти две части информации в качестве параметров для методов веб-сервиса.

1 голос
/ 19 июня 2009

Лучше всего «спросить пользователя» через параметры сервиса. Например, местоположение пользователя не говорит вам, что он только посещает это место и все еще работает в своем домашнем времени; или что они находятся в мультикультурном регионе (например, в Швейцарии) и выбрали культуру, которую вы не ожидали (французский, когда вы ожидали немецкий).

1 голос
/ 19 июня 2009

Включение часового пояса в запросе было предметом проекта RFC здесь

Поскольку это не реализовано, единственное решение - получить смещение UTC в JavaScript:

// create Date object for current location
d = new Date();
// convert to msec since Jan 1 1970
localTime = d.getTime();
// obtain local UTC offset and convert to msec
localOffset = d.getTimezoneOffset() * 60000;
...