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
The solution is actually quite simple (pure, simple Java):
OUTPUT IS:
We can handle this by using offset value
Test Code snippet:
Output: 1387353270742 1387335270742
Understanding how computer time works is very important. With that said I agree that if an API is created to help you process computer time like real time then it should work in such a way that allows you to treat it like real time. For the most part this is the case but there are some major oversights which do need attention.
Anyway I digress!! If you have your UTC offset (better to work in UTC than GMT offsets) you can calculate the time in milliseconds and add that to your timestamp. Note that an SQL Timestamp may vary from a Java timestamp as the way the elapse from the epoch is calculated is not always the same - dependant on database technologies and also operating systems.
I would advise you to use System.currentTimeMillis() as your time stamps as these can be processed more consistently in java without worrying about converting SQL Timestamps to java Date objects etc.
To calculate your offset you can try something like this:
I hope this is helpful!
Had a look about and I don't think theres a timezone in Java that is GMT + 13. So I think you have to use:
(If there is then change "GMT" to that Timezone and remove the 2nd line of code)
OR
If you want to set a specific time/date you can also use:
Your approach works without any modification.
Some easy way. One important thing to remember that Date does not maintain the timezone, its only
long millis
number, as it treated here.TimezoneServer is something like
TimeZone timeZoneServer = TimeZone.getTimeZone("GMT+1")