A lot of your answers could have easily been answered by reading the API documentation. For example, Date's getTime() method is described like this:
Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT represented by this Date object.
That answers #2 directly, it's based on a specific time zone. And the answer for #3 follows directly from that. But you'll observe that Calendar has getTimeZone() and setTimeZone() method, which strongly suggests that a Calendar has a time zone attribute.
I don't know what you have tried. But for your description I would just do this:
Also, if you want to format a Date, or a Calendar, in a specific time zone then note that SimpleDateFormat also has a setTimeZone() method; it will convert timestamps to your local time zone if you don't tell it otherwise. And yes,
you should be using SimpleDateFormat to format timestamps instead of relying on the toString() method of Date and Calendar.