views:

74

answers:

1

Okay, I've the strangest problem that I've just started to experience in a grails application working just fine for 2 months.

Application is deployed on Linux/Tomcat 6 and MySQL is the DBMS at back end.

When I type date on linux prompt, I get following output:

$>date Sun Aug 8 03:52:06 PKT 2010

Where as in Grails application new Date() returns me a date 5 hours behind the current system date. Time Zone being shown in application is GMT. This wasn't the case initially. Anyways I did set the TimeZone default to GMT+5 in bootstrap and redeployed the application, hoping things will get fixed.

Now new Date() got resolved however a new issue was visible. For all Domain classes having Date fields mapped to some database tables with corresponding properties Date only. I am getting a date in GUI like this: 2010-08-08 05:00:00

Notice the 05 hours added to the date field automatically, in database the value in field is Date only there's no time information and I actually don't need the time information at all, it should be 00:00:00 as it was previously before this issue popped up.

Strange isn't it. Please help me, as I'm lost already, tried so many things and nothing found as a solution. It's a pity when a flawless application after two months start producing such bugs.

Please help, anticipating positive and quick responses.

Regards, Alam Sher

A: 

My first question is that if you don't care about the time, why are you displaying it in the UI?

It looks like Grails is assuming that the database is using GMT and is adding 5 to the date. What timezone is your database set to? The application and the database should probably be in sync.

If you want the time to show on the UI and always be zero, you could zero out the time using the clearTime() method on Groovy's enhanced java.util.Date class. See here: http://groovy.codehaus.org/groovy-jdk/java/util/Date.html

As a note, I usually use Calendar to create a date by passing in a timezone:

def date = Calendar.getInstance(TimeZone.getTimeZone("CST")).time

Javid Jamae
I'm not showing time on GUI but there is a comparison between entity date and current date of the system. e.g. If the Entity's Date is > Current Date then there's status String (Blocked) for that particular entity I've to show on GUI :) I've checked that Select now(); in MySQL is returning a time that is correct. Where as new Date() even in plain Java file is returning a wrong Date with default timezone as 'GMT'.How MySQL is getting timezone information correctly, and why java is overriding system timezone somehow?Server Java Version:Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Alam Sher