Q:

I want to get a formatted Date in Java

I want to get a new Date object with a SimpleDateFormat applied to it.  I would like to do something like: 
SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
Date today = new Date();
today = myFormat.format(today);

I can't do this, because today is a Date, and format returns a String. I also have tried:
Date today;
SimpleDateFormat myFormat = new SimpleDateFormat("dd MMM yyyy kkmm");
try{
    today = myFormat.parse((new Date()).toString());
}catch(Exception e){

}

This isn't a good solution, because when I try to use today elsewhere Java complains that today may not have been instantiated.  What is a good way to change the format of a Date object (while still keeping it a Date object, and not turning it to a string)?

A:

You are looking at Format and Date wrongly.

Date does not contain format. Date is just a class containing date info like date, month, hours, sec etc.
SimpleDateFormat is the one which tells you the string representation of Date. But there is no date associated with it.

So the idea is when you have to display date or have to store date in some string representation, you will use SimpleDateFormat and pass it the date you want string representation for.
One benefit of doing this way is that, I can use same Date object and can show two different string representations (using two different instances of SimpleDateFormat). And also viceversa, having defined one SimpleDateFormat instance, I can format multiple dates.
Edit: 
Now if you want to strip some info from the date. Use
Calendar rightNow = Calendar.getInstance();
Calendar cal = new GregorianCalendar(
   rightNow.get(YEAR),
   rightNow.get(MONTH),
   rightNow.get(DAY_OF_MONTH));
Date now = cal.getTime();

There are other good soln like JodaTime
Ref:
GregorianCalendar
Calendar
Joda Time

