Получение часового пояса из текущего географического местоположения пользователя без использования API часового пояса - PullRequest
0 голосов
/ 31 декабря 2018

Примите во внимание следующее:

LocationCallback mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            List<Location> locationList = locationResult.getLocations();
            if (locationList.size() > 0) {
                //The last location in the list is the newest
                Location location = locationList.get(locationList.size() - 1);
            }
        }
    };

Если я попытаюсь получить свой текущий часовой пояс, используя:

long time = location.getTime();
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(time));
TimeZone timeZone = calendar.getTimeZone();

Возвращен часовой пояс, связанный с моим текущим работающее устройство и НЕ мое текущее местоположение .Из-за текущей логики пользователь может вручную изменить свой текущий часовой пояс через настройки устройства -> Дата и время -> Отключить автоматический часовой пояс.

Можно ли получить текущий часовой пояс на основе географического местоположения пользователя с помощью API определения местоположения сервисов Google Play, а не какого-либо другого API?

1 Ответ

0 голосов
/ 31 декабря 2018

Зачем вам нужен местный часовой пояс?

  • Если у пользователя установлен часовой пояс в другом месте, зачем игнорировать его предпочтения?Если пользователь переопределил функцию автоматического часового пояса, это потому, что он хочет видеть моменты, представленные в определенном часовом поясе.
  • При записи текущего момента, вообще говоря, вы должны записывать текущее значение в формате UTC без учета какого-либо часового пояса.

Кроме того, вы используете ужасно хлопотную дату и времяклассы, которые были вытеснены несколько лет назад классами java.time .

Чтобы зафиксировать текущий момент, используйте UTC.

Instant instant = Instant.now() ;

Для представления пользователю используйте текущий часовой пояс JVM по умолчанию.

ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = instant.atZone( z ) ;

Если это важно, подтвердите это у пользователя.Или, по крайней мере, отобразите в пользовательском интерфейсе часовой пояс, который вы используете.

Две переменные instant и zdt представляют один и тот же одновременный момент, одну и ту же точку на временной шкале, но с другой стеной.время

Чтобы ввести встречу или событие в будущем, введите дату, время суток и зону.Соберите их в ZonedDateTime объект.

LocalDate ld = LocalDate.of( 2018 , Month.JANUARY , 23 ) ;
LocalTime lt = LocalTime.of( 13 , 30  ) ;
ZoneId z = ZoneId.systemDefault() ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;

Чтобы сравнить с текущим моментом, получите Instant с настройкой UTC.

Instant instant = zdt.toInstant() ;

Получить текущий момент.

Instant now = Instant.now() ;

Сравнить.

if( instant.isBefore( now ) ) {
    … reject their input
}

Таким образом, вы можете видеть, что физическое местоположение пользователя не имеет отношения к вашей обработке значений даты и времени и долей времени.

Тот факт, что вы задали свой вопрос, заставляет меня подозревать, что есть какой-то аспект обработки даты и времени, который вы не полностью понимаете.Обработка даты и времени - дело трюка.Так что уточните свой вопрос или ответьте с комментарием, если вы думаете, что я не понял вашу точку зрения.

...