月末を出すときは、加算前の日を1日にしておいて、加算後-1日するのが自分の常套手段。
(どの言語でも大体このロジックは使えるし)
import java.util.Calendar; public class Main { public static void main(String[] args) throws Exception { // 指定日からnヶ月後の月末を出力 int y = 2012; int m = 12; int d = 14; int n = 2; Calendar cal = Calendar.getInstance(); cal .set(y,m - 1, d); dispDate(calendar); cal .set(y,m - 1, 1); cal .add(Calendar.MONTH, n + 1); cal .add(Calendar.DATE, -1); dispDate(cal); } private static void dispDate(Calendar cal ){ int year = cal .get(Calendar.YEAR); int month = cal .get(Calendar.MONTH) + 1; int day = cal .get(Calendar.DATE); StringBuffer sb = new StringBuffer(); sb.append(year + "年" + month + "月" + day + "日"); System.out.println(new String(sb)); } }