Hello,
Using WO 5.4.3. Here's yet another NSTimestamp/NSTimestampFormatter/SimpleDateFormat thread... :-)
Heeding the deprecation warning for NSTimestampFormatter, I've been trying to use SimpleDateFormat in its place. I'm doing the following:
1. PostgreSQL is set to GMT. 2. Application() contains this:
// Set the default TZ for NSTimestamps to GMT NSTimeZone.setDefaultTimeZone(NSTimeZone.getGMT()); // Set the default TZ for Java TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
3. Column C in table T is of type "TIMESTAMP WITHOUT TIME ZONE". 4. I'm inserting a creation timestamp into C using 'new NSTimestamp'. I can confirm that the current time in GMT is inserted into T. 5. A user preference system allows users to nominate a local timezone if they prefer not to see the dates as GMT. 6. In the Session I store a SimpleDateFormat constructed like this:
SimpleDateFormat sdf = new SimpleDateFormat("...some format string...");
sdf.setTimeZone(userLocalTZ);
Where userLocalTZ is an NSTimeZone constructed from the save preference. 7. When I try to use the SimpleDateFormatter, it doesn't adjust the construction timestamp when binding it to a wo:string formatter. Here's some debugging output:
SurveyInstanceList.timestampFormat: ((NSTimeZone) result.getTimeZone()).secondsFromGMT()) = 34200
This is the TimeZone from the SimpleDateFormat: it's the correct offset from GMT.
SurveyInstanceList.timestampFormat: constructionDate().timeZone() = Etc/GMT (GMT) offset 0
This is the TimeZone from the timestamp. It's in GMT.
SurveyInstanceList.timestampFormat: result.format(constructionDate())) = 15/04/2009 08:34:41
This is the result of the format: the timestamp is not adjusted, and appears exactly as it appears in the database.
8. If I pull the same TimeZone out of the SimpleDateFormat and use it to create an NSTimestampFormatter, it works:
nsf.setDefaultFormatTimeZone((NSTimeZone)result.getTimeZone());
Using nsf.format adjusts the time to the user's nominated local timezone as expected.
What am I doing wrong with SimpleDateFormat?
|