I want to convert this GMT time stamp to GMT+13:
2011-10-06 03:35:05
I have tried about 100 different combinations of DateFormat, TimeZone, Date, GregorianCalendar etc. to try to do this VERY basic task.
This code does what I want for the CURRENT TIME:
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+13"));
String newZealandTime = formatter.format(calendar.getTime());
But what I want is to set the time rather then using the current time.
I found that anytime I try to set the time like this:
calendar.setTime(new Date(1317816735000L));
the local machine's TimeZone is used. Why is that? I know that when "new Date()" returns UTC+0 time so why when you set the Time in milliseconds does it no longer assume the time is in UTC?
Is possible to:
- Set the time on an object (Calendar/Date/TimeStamp)
- (Possibly) Set the TimeZone of the initial time stamp (calendar.setTimeZone(...))
- Format the time stamp with a new TimeZone (formatter.setTimeZone(...)))
- Return a string with new time zone time. (formatter.format(calendar.getTime()))
Thanks in advance for any help :D
As always, I recommend reading this article about date and time in Java so that you understand it.
The basic idea is that 'under the hood' everything is done in UTC milliseconds since the epoch. This means it is easiest if you operate without using time zones at all, with the exception of String formatting for the user.
Therefore I would skip most of the steps you have suggested.
Alternatively, you can use Joda time. I have heard it is a much more intuitive datetime API.
We can get the UTC/GMT time stamp from the given date.
It will return the UTC time based on passed date.
We can do reverse like UTC time stamp to current date and time(vice versa)
I hope this will help others. Thanks!!