Javaで日付処理のメモ

DateとCalendarがあるのが難解ですが、以下のように思います。
正式なドキュメントでないので信じないでください。

DateとCalendar

java.util.Date

http://docs.oracle.com/javase/jp/6/api/java/util/Date.html
特定の時点をミリ秒で保持するだけのクラス。基本的にimmutable(値を変更不可能)。
1か月後の日付とかは計算できない。なぜならそのためにはカレンダーが必要(カレンダーによって1か月後の日付が異なる可能性があるし、そもそも月という概念がないかもしれない)だが、Dateはカレンダーを持たないからである。
それから、文字列をパースしてDateを作ったり、Dateをフォーマットして文字列を作ったりもできない。それらのためにはSimpleDateFormatを使う。

java.util.Calendar

http://docs.oracle.com/javase/jp/6/api/java/util/Calendar.html
特定の時点をミリ秒で表すカーソルを持つ。それからカレンダー(暦)を持つ。カレンダーを用いてカーソルを動かすことができる。したがってmutable(値を変更可能)。
カレンダーごとにサブクラスがある。たとえばグレゴリオ暦(ふつうのカレンダー)なら、GregorianCalendar.

試してないサンプル

文字列からDateを得る
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("2013-08-17");
Dateから文字列を得る
String string = new SimpleDateFormat("yyyy-MM-dd").format(date);
DateからCalendarを得る(1行でできない!)
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
CalendarからDateを得る
Date date = calendar.getTime();