Date to prosta klasa ktora przetrzymuje tylko czas (milis od epoch). Kiedys nie bylo Calendar, i ta klasa miala metody aby dokonywac manipulacji / arytketyki z datami (jak dodanie 5 dni, odjecie miesiaca, itp), od czasu Calendar te metody sa @Deprecated.
Calendar to 'nowy' sposob, ktory ma dosc potezne metody do arytmetyki, wspiera lokalizacje (np miesiaca po polsku). Calendar to klasa bazowa, abstrakcyjna, ktora teoretycznie moze byc rozszerzana przez inne klasy. I tak np mamy GregorianCalendar, ale mozemy niby miec buddyjski, koptyjski itp itd. W praktyce w tej klasie jest za duzo kodu ktory zaklada podzial dat w sposob podobny do gregorianskiego / julianskiego, przez co implementacja innych jest nieco utrudniona, czasami wrecz niemozliwa. Nie pomaga tez fakt ze jest to klasa, a nie interfejs - nie mozna po prostu zrobic swojej wlasnej implementacji.
Osobiscie jak tylko moge unikam obu klas - Calendar wg mnie jest strasznie nieprzejrzysty, magiczny wrecz - nie wiadomo nigdy kiedy nastapi rekalkulacja wewnetrznej daty - wywolujesz metody i one nic nie robia, po czym wolasz klejna i dopiero ona dokonuje obliczen, przez co mialem kiedystam problem. Moze sie cos zmienilo. Ja uzywam jak tylko moge klas z biblioteki JodaTima - dosc duze, czasami skomplikowane API, ale tak naprawde trzeba poznac pare klas i po prostu dziala. Z Date / Calendar mialem mnostwo problemow gdy zapisywalem date do bazy w jednej strefie czasowej, odczytywalem w innej, i jakos to nie dzialalo - a nie jest to jakis szczegolny przypadek, ot chociazby zmiany czasu dwukrotnie na rok potrafia troche nabrudzic. Wydaje sie ze 2 dni to malo, i to tylko przez godzine, ale sprobuj takich argumentow z: szefem banku dla ktorego robisz soft, operatorem komorkowym. Przyklad: zmieniamy czas z 2 na 3 w nocy, koles dzwoni komorka od 1:59 przez 2 minuty, ale nagle jest 3:01 w systemie, i operator kasuje go za 1h:02m. To nie sa latwe problemy, a java.util.Date i Calendar tylko to utrudniaja. Dodatkowo, obie klasy sa mutable, a klasy w JodaTime nie. Jak mozesz to daj sobie z nimi spokoj (moja osobista rada, moze inni lubia i chwala sobie te klasy?).
Powiedziawszy to, JodaTime ma tez swoje problemy, dlatego czekam na http://jcp.org/en/jsr/detail?id=310, pisanego przez tworce Jody i majacego te slabosci wyeliminowac. Zdaje sie w Java 7.