Ti faccio un esempio pratico (NON è un buon esempio di programmazione, ma mostra un po' di features delle classi citate)

codice:
import java.text.*;
import java.util.*;

public class dateFormatTest {
  
  private Date myDate;
  private SimpleDateFormat df;
  private long longTime;
  private boolean before;
  
  public dateFormatTest(String s) {
    try {
      df = new SimpleDateFormat("dd/MM/yyyy-kk:mm:ss-zzz");
      myDate = df.parse(s);
      longTime = myDate.getTime();
      before = myDate.before(new Date(0));
      System.out.println("Hai immesso: "+myDate.toString()+" Equivale a: "+longTime+" millisecondi da \"Epoch\" "+" e viene "+(before ? "prima" : "dopo")+" \"Epoch\"");
    } catch (Exception e) { System.out.println("Errore nel parsing della data "+e.toString());}
  }
  
  public static void main(String args[]) {
    dateFormatTest dft1 = new dateFormatTest("1/1/1970-0:0:0-GMT");
    dateFormatTest dft2 = new dateFormatTest("01/01/2005-00:00:00-PDT");
  }
}
La parte fondamentale e
codice:
df = new SimpleDateFormat(...);
Con cui definisci il pattern che le date inserite avranno.
Nel caso del mio esempio, raccolgo

giorno/mese/anno-ore:minuti:secondi-zona

che potrebbe non rispecchiare necessariamente il formato della tua data: se ad esempio ricevessi mese-giorno-anno, potresti definire

codice:
df = new SimpleDateFormat("MM-dd-yyyy");
e passare le date al parser di conseguenza.
Ciao