Определить часовой пояс пользователя

Ключевое слово abstract не имеет значения. Единственное, о чем говорится в спецификации:

Для совместимости со старыми версиями платформы Java разрешено, но не рекомендуется, в качестве стиля, избыточно указывать абстрактный модификатор для методов, объявленных в интерфейсы.

Быстрый тест показывает, что ключевое слово действительно не имеет значения. Эти два являются действительными:

abstract class A implements B { }
interface B {
    public void meth();
}

abstract class A implements B { }
interface B {
    public abstract void meth();
}

, и оба этих параметра являются недопустимыми:

class A implements B { }
interface B {
    public void meth();
}

class A implements B { }
interface B {
    public abstract void meth();
}
A.java:1: A is not abstract and does not override abstract method meth() in B
class A implements B { }
^
1 error
585
задан Shahnewaz 24 December 2018 в 22:47
поделиться

7 ответов

Если бы Вы, оказывается, используете OpenID для аутентификации, , Простое Регистрационное Расширение решило бы проблему для аутентифицируемых пользователей (необходимо будет преобразовать от tz до числового).

Другая опция состояла бы в том, чтобы вывести часовой пояс из предпочтения страны агента пользователя. Это - несколько сырой метод (не будет работать на en-США), но делает хорошее приближение.

14
ответ дан Dmitry Shechtman 24 December 2018 в 22:47
поделиться

Волшебство все, кажется, находится в

visitortime.getTimezoneOffset()

, Это прохладно, я не знал об этом. Делает это работает в Internet  Проводник, и т.д.? Оттуда необходимо быть в состоянии использовать JavaScript для Ajax, установить cookie, безотносительно. Я, вероятно, пошел бы путем cookie сам.

необходимо будет позволить пользователю изменять его все же. Мы пытались использовать геолокацию (через maxmind), чтобы сделать это только что, и было неправильно обоснованно часто - достаточно сделать его не стоящим выполнения, таким образом, мы просто позволяем пользователю установить его в их профиле и показываем уведомление пользователям, которые еще не установили их.

18
ответ дан Peter Mortensen 24 December 2018 в 22:47
поделиться

JavaScript является самым легким способом получить местное время клиента. Я предложил бы использовать XMLHttpRequest для передачи местного времени обратно, и если это перестало работать, отступите к часовому поясу, обнаруженному на основе их IP-адреса.

До геолокации, я использовал MaxMind GeoIP на нескольких проектах, и это работает хорошо, хотя я не уверен, обеспечивают ли они данные часового пояса. Это - сервис, за который Вы платите, и они обеспечивают ежемесячные обновления Вашей базы данных. Они обеспечивают обертки на нескольких веб-языках.

53
ответ дан Peter Mortensen 24 December 2018 в 22:47
поделиться

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

, Если бы это был я, я, вероятно, попытался бы выбрать часовой пояс с помощью стороны клиента JavaScript и затем отправить его серверу с помощью Ajax или чего-то.

106
ответ дан Mads Kristiansen 24 December 2018 в 22:47
поделиться

Самое популярное (== стандарт?) способ определить часовой пояс, который я видел вокруг, просто выяснение у самих пользователей. , Если Ваш веб-сайт требует подписки, это могло бы быть сохранено в данных профиля пользователей. Для скоро пользователей даты могли быть отображены как UTC или GMT или некоторые такой.

я не пытаюсь быть самоуверенным типом. Это просто, что иногда некоторые проблемы имеют более прекрасные решения за пределами любого контекста программирования.

192
ответ дан Ishmaeel 24 December 2018 в 22:47
поделиться
-new Date().getTimezoneOffset()/60;

Метод getTimezoneOffset () вычтет ваше время из GMT и верните количество минут. Итак, если вы живете в GMT-8, он вернет 480.

Чтобы выразить это в часах, разделите на 60. Также обратите внимание, что знак противоположен тому, что вам нужно - он вычисляет смещение GMT ​​от вашего часового пояса, не смещение вашего часового пояса от GMT. Чтобы исправить это, просто умножьте на -1. Переход на летнее время.

322
ответ дан 22 November 2019 в 22:01
поделиться

Вот статья (с исходным кодом), которая объясняет, как определить и использовать локализованное время в приложении ASP.NET (VB.NET, C#):

It's About Time

Вкратце, описанный подход опирается на функцию JavaScript getTimezoneOffset, которая возвращает значение, сохраняемое в куки сессии и используемое code-behind для корректировки значений времени между GMT и местным временем. Самое приятное, что пользователю не нужно указывать часовой пояс (код делает это автоматически). Есть и другие нюансы (поэтому я и даю ссылку на статью), но предоставленный код делает его действительно простым в использовании. Я подозреваю, что вы можете преобразовать логику в PHP и другие языки (при условии, что вы понимаете ASP.NET).

15
ответ дан 22 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: