Я знаю, что этот предмет был избит до смерти, но после поиска в течение нескольких часов к этой проблеме я должен был спросить.
Моя проблема: сделайте вычисления в даты на сервере на основе зоны текущего времени клиентского приложения (iPhone). Клиентское приложение говорит сервер в секундах, как далеко далеко его часовой пояс вдали от GMT. Я хотел бы затем использовать эту информацию, чтобы сделать вычисление в даты в сервере. Даты на сервере все хранятся как время UTC. Таким образом, я хотел бы получить ЧАС объекта Даты UTC после того, как он был преобразован в эту зону местного времени.
Моя текущая попытка:
int hours = (int) Math.floor(secondsFromGMT / (60.0 * 60.0));
int mins = (int) Math.floor((secondsFromGMT - (hours * 60.0 * 60.0)) / 60.0);
String sign = hours > 0 ? "+" : "-";
Calendar now = Calendar.getInstance();
TimeZone t = TimeZone.getTimeZone("GMT" + sign + hours + ":" + mins);
now.setTimeZone(t);
now.setTime(someDateTimeObject);
int hourOfDay = now.get(Calendar.HOUR_OF_DAY);
Час переменных и минуты представляют час и минуты, зона местного времени вдали от GMT. После отладки этого кода - час переменных, минуты и знак корректны.
Проблемой является hourOfDay, не возвращает корректный час - это возвращает час по состоянию на время UTC и не местное время. Идеи?
Строка вашего часового пояса сформулирована неправильно. Попробуйте это,
String sign = secondsFromGMT > 0 ? "+" : "-";
secondsFromGMT = Math.abs(secondsFromGMT);
int hours = secondsFromGMT/3600;
int mins = (secondsFromGMT%3600)/60;
String zone = String.format("GMT%s%02d:%02d", sign, hours, mins);
TimeZone t = TimeZone.getTimeZone(zone);