The short answer is that you need to specify the TimeZone instance referenced by the Calendar (which is implicit in a DateFormat instance).
The longer answer follows:
It seems somewhat strange because of the semantics but the time, as in getTime() is independent of the TimeZone. The time is just the milliseconds since Jan 1, 1970 UTC and will be, nearly, the same on any machine in the world. A Calendar is the endpoint you're getting to.
A Calendar has a TimeZone and and a Locale. The Locale provides the formatting and the text, the TimeZone provides the offset from UTC plus the local daylight savings parameters. A DateFormat has a Calendar reference and does the actual formatting to a
String.
The following (ridiculously verbose output) will print all of the Locales and all the times formatted for that Locale. By itself its utility is limited (unless of course you really need to know the Fijian means of referring to local time in Lima, Peru) but it shows the relation.