Hi guys,

My old bug-bear is back!!

I am experiencing some grief because the Isis applib Date, DateTime 
and java.sql.Date (and their value semantic providers) explicitly use an 
internal timezone of UTC.

This impact on datastores or anyone creating a date directly.

I've raised this before (a few years ago, if memory serve), but never 
reached a resolution.. 

If the timezone is set to UTC, then all dates (and date times) seem to 
be interpreted as in this time zone. This causes problems for me, with 
my national (constant) GMT+2 offset, and anyone else not on GMT.

One impact is that if I create a java.sql.Date, I must explicitly create it 
via a Calender with a UTC time zone. Simply creating a java.sql.date 
using "java.sql.date.valueOf("2010-03-05")" returns a value that does 
not compare with applib's Date.

Another impact: Relative comparisons don't work!
A simple proof (please check my logic): If I create an applib Date:
Date applibDate = new Date(2010, 3, 5);
and a DateTime:
DateTime dateTime = new DateTime(2010, 3, 5, 1, 23);
Then the comparison:
 dateTime.dateValue().after(date.dateValue())
Fails, because I am at GMT+2!

However, If I change the DateTime to 02h23, then it passes!

This occurs because, deeper down, the Date value is stored (for me) 
as: 2010-03-05, 02h00
I can get partial happiness with java.sql.Date if I remove the explicit 
setting of the time zone to UTC in the appropriate value semantic 
provider (JavaSqlDateValueSemanticsProvider), but then the xml 
object store breaks! 
By  success, I mean that a new java.sql.Date of 3rd March has a cdate 
of "2010-03-05 0h00".

People living in GMT will not be affected (until daylight savings time?)

Symptomatically, this should mean that anyone with a timezone west 
of GMTcreating a applib date (or maybe just java.sql.date) should get 
a date of the previous day!


In both the SQL and the XML object stores, dates are not stored with 
an explicit time zone (meaning, 2010-01-01 is 2010-01-01, whether 
you're in Japan or Hawaii), so you can't safely assume one?!?

If you're writing an application that manages meetings (for example) 
and the participants span multiple time-zones, then I think you need to 
handle time zones specially carefully, and in your application/domain 
code?

If you don't particularly care about comparing times that are (explicitly) 
in different time zones, Date, DateTime and java.sql.Date should just 
work!

Comments anyone? Should Isis internal Dates (and DateTimes, etc) 
explicitly be based on a timezone set to UTC?


Kevin

Reply via email to