Мой сервер отправляет мне часовые пояса в формате «America / Los Angeles». На клиенте у меня есть время, которое мне нужно отображать в этом часовом поясе. Ответом будет «тихоокеанское стандартное время» или «тихоокеанское стандартное время», в зависимости от летнего времени в данное время. Как мне сделать это преобразование?
Я использую Java ME (Blackberry 4.7, если быть точным), поэтому я не могу использовать Joda Time.
Мне нужно будет быстро произвести этот расчет для многих дат (но только один часовой пояс), поэтому я не могу просто отправить мне смещение с сервера, потому что смещение может меняться в зависимости от даты.
Изменить: Позвольте мне повторить проблему, потому что, похоже, будет некоторая путаница. Мне дается имя зоны и дата. Я хочу знать смещение от GMT в этом часовом поясе на эту дату. Ответ будет зависеть от летнего времени.
В качестве дополнительного бонуса я хотел бы, чтобы TLA отображался пользователю (например, «PST» или «PDT»), но это вторично.
Решение: Я резюмирую решение здесь, потому что из приведенных ниже ответов оно не очень ясно. По сути, это то, что мне нужно в J2ME:
TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(zone);
calendar.setTime(new Date(2011, 1, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.setTime(new Date(2011, 6, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));