A java.util.Date
- абсолютный момент времени. 0900 часов UTC и 1200 часов UTC + 3 - это абсолютно одинаковые java.util.Date
объекты. В него не нужно вносить «корректировку» для представления того или другого.
Чтобы получить удобочитаемое представление, учитывающее конкретный часовой пояс, вы можете установить часовой пояс для объекта DateFormat
.
DateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC+3"));
String time = format.format(yourDate);
Решение вопроса, поставленного в комментарии:
Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("UTC+3"));
cal1.setTime(yourDate);
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal2.clear();
cal2.set(Calendar.YEAR, cal1.get(Calendar.YEAR));
cal2.set(Calendar.MONTH, cal1.get(Calendar.MONTH));
cal2.set(Calendar.DATE, cal1.get(Calendar.DATE));
cal2.set(Calendar.HOUR_OF_DAY, cal1.get(Calendar.HOUR_OF_DAY));
//simile for whatever level of field precision is needed
Date shiftedDate = cal2.getTime();