You can use the below function
    private Date shiftTimeZone(Date date, TimeZone sourceTimeZone, TimeZone targetTimeZone) {
    Calendar sourceCalendar = Calendar.getInstance();
    sourceCalendar.setTime(date);
    sourceCalendar.setTimeZone(sourceTimeZone);
    Calendar targetCalendar = Calendar.getInstance();
    for (int field : new int[] {Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, Calendar.HOUR, Calendar.MINUTE, Calendar.SECOND, Calendar.MILLISECOND}) {
        targetCalendar.set(field, sourceCalendar.get(field));
    }
    targetCalendar.setTimeZone(targetTimeZone);
    System.out.println("........"+targetCalendar.getTimeZone());
    return targetCalendar.getTime();
  }
Usage:
    Date date= new Date();
    SimpleDateFormat sf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
    sf.format(date);
    TimeZone tz = TimeZone.getTimeZone("GMT") OR TimeZone tz =  sf.getTimeZone();      
    TimeZone tz1 = TimeZone.getTimeZone("EST");     
    Date c= shiftTimeZone( date,tz,tz1);
    System.out.println("Format :   " + sf.format(c));
Output
            sun.util.calendar.ZoneInfo[id="EST",offset=-18000000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
    Format :   01-05-2013 16:23:57