I've already search trying to understand what's happening in the following snippet of code but I didn't find anything helpful yet.
I'm trying to output something like follows:
But, I'm getting:
I've been trying to use GMT and UTC Timezones when creating a calendar but it didn't solve this problem.
I think that there is something related to Epoch but I'm not getting it.
Notes: I know that an instance of Date would never have a date defined with day equals to 0 or month equals to 0.
But 1000 milliseconds is equal to 1 second and 1 second is far enough to complete 1 day. :P
I'd use HH, not hh. hh returns something between 01 and 12 inclusive. midnight in hh:mm:ss is 12:00:00 (AM, not PM).
About your issue. The date is probably 21:00:01 on December 31st 1969. That indicates there's indeed a timezone issue. If I run your code I get 001:01:00:01,000. Changing the time zone of the Calendar does not help. However, you can also change the time zone of your SimpleDateFormat. If I do that I get 001:12:00:01,000 (or 001:00:00:01,000 if I switch to HH).
On a side note, you can drop the Calendar completely. You create a Calendar, set its time, then retrieve that time again. You can create a Date directly: