преобразование времени UTC к зоне местного времени в Java

Я знаю, что этот предмет был избит до смерти, но после поиска в течение нескольких часов к этой проблеме я должен был спросить.

Моя проблема: сделайте вычисления в даты на сервере на основе зоны текущего времени клиентского приложения (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 и не местное время. Идеи?

5
задан aloo 9 June 2010 в 21:20
поделиться

1 ответ

Строка вашего часового пояса сформулирована неправильно. Попробуйте это,

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);
3
ответ дан 15 December 2019 в 06:16
поделиться
Другие вопросы по тегам:

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