Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java time in GMT

I have a Grails application with the following code:

Date now = Calendar.getInstance().getTime() //Also tried new Date()
println "now: " + now

When I do this, I get now: Thu Aug 18 12:47:09 CDT 2011. I need the date to be in GMT, not local time because I need to store the GMT time in a database. I can use a simpleDateFormat object to print out the time in GMT, but I need to actually store it as GMT.

Question: How do I convert a Date object to a Date object using GMT?

like image 723
Mike Caputo Avatar asked Aug 18 '11 17:08

Mike Caputo


3 Answers

This accentuates why Java sucks at time. The previous posts are all close, but we need to be very careful about getting the current time in GMT, and getting the current time in CDT and calling it GMT.

TimeZone reference = TimeZone.getTimeZone("GMT");
Calendar myCal = Calendar.getInstance(reference);

This is the current time in GMT, with a timezone context of GMT.

To convert to a Date object which keeps the zone intact you'll need to call:

TimeZone.setDefault(reference);

This setting will last as long as your current JVM. Now calling get Time should produce the desired result.

myCal.getTime();
like image 187
jpredham Avatar answered Sep 24 '22 21:09

jpredham


Well, if you really want time in GMT, you need to get it as GMT (@jpredham is right. Kudos to you! Editing my post to reflect this)

So do the following

//this option uses TimeZone
TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT");
TimeZone.setDefault(gmtTimeZone);
Calendar calendar = Calender.getInstance(gmtTimeZone);

Date myDate = calendar.getTime();
like image 45
Chris Aldrich Avatar answered Sep 24 '22 21:09

Chris Aldrich


Try this:

println Calendar.getInstance(TimeZone.getTimeZone('GMT')).format('HH:mm:ss')

Note that when you convert to a date, you lose the timezone information. When Java/Groovy formats your Date for printing, it automatically formats it for your local timezone. Don't worry, your date doesn't have a timezone associated with it. You can add the proper timezone back in when you display it like so:

Date now = Calendar.getInstance(TimeZone.getTimeZone('GMT')).time
def formatter = new java.text.SimpleDateFormat('HH:mm:ss')
formatter.timeZone = TimeZone.getTimeZone('GMT')
println formatter.format(now)
like image 28
ataylor Avatar answered Sep 25 '22 21:09

ataylor