Я получаю datetime из веб-службы SOAP без информации о часовом поясе. Следовательно, десериализатор оси принимает UTC. Тем не менее, дата-время действительно находится в Сиднее. Я решил проблему, вычитая смещение часового пояса:
Calendar trade_date = trade.getTradeDateTime();
TimeZone est_tz = TimeZone.getTimeZone("Australia/Sydney");
long millis = trade_date.getTimeInMillis() - est_tz.getRawOffset();
trade_date.setTimeZone( est_tz );
trade_date.setTimeInMillis( millis );
Однако я не уверен, что это решение также учитывает летнее время. Я думаю, что это нужно, потому что все операции выполняются в UTC. Любой опыт манипулирования временем в Java? Лучшие идеи о том, как решить эту проблему?