Sì, la questione è solo quella di applicare il TimeZone per il parse e/o il format. In entrambi i casi si può specificare un TimeZone esplicito o usare quello di "default" del sistema (se è quello che si vuole, ovviamente).

Ecco un esempio più completo:

codice:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");

String oraNewYork = "2016-10-31 10:30:00.000";
sdf.setTimeZone(TimeZone.getTimeZone("America/New_York"));
Date d = sdf.parse(oraNewYork);

sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
String oraUTC = sdf.format(d);

sdf.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
String oraItalia = sdf.format(d);

System.out.println("New York: " + oraNewYork);
System.out.println("UTC     : " + oraUTC);
System.out.println("Italia  : " + oraItalia);

Output:
codice:
New York: 2016-10-31 10:30:00.000
UTC     : 2016-10-31 14:30:00.000
Italia  : 2016-10-31 15:30:00.000