Мой сервер отправляет мне часовые пояса в формате «Америка / Лос-Анджелес».На клиенте у меня есть время, которое мне нужно отобразить в этом часовом поясе.Ответ будет «PST» или «PDT», в зависимости от перехода на летнее время в данный момент.Как мне сделать это преобразование?
Я на 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)));