It pays to read the API docs - Java Calendar months start at 0 for January, so you are formatting the 29th of February for 2010 which isn't a leap year, so it rolls over to the start of the next month.

If you use the Calendar constants, it will work as expected:
Code:
cal1.set(2010, Calendar.JANUARY, 29);
Unless in communicating with it [a computer] one says exactly what one means, trouble is bound to result...
A. Turing