Hi Will!

Ah yes, the Java Date question - dates/times are always an issue with Java.

AFAIK Magnolia essentially takes the viewpoint (following JackRabbit) that 
dates are saved in the repo in UTC.

When you read out the date, you must ensure the timezone set in your calendar 
object is appropriate for the user looking at the date.
Thus, a user sitting in London will see 22h, while his friend in NYC will see 
16h ---> both are correct local time represenations of the same UTC time.

I was under the impression that the calendar is automatically set to the 
timezone of the server by default. Is this not the case?

Regards from Vienna,

Richard



-----Ursprüngliche Nachricht-----
Von: [email protected] [mailto:[email protected]] 
Im Auftrag von Will Scheidegger
Gesendet: Dienstag, 01. März 2011 12:17
An: Magnolia User-List
Betreff: [magnolia-user] JCR Dates -> Java Calender objects: TimeZone?!?


Dear Magnolians

Either I'm missing something or the conversion from JCR Dates to Java Calendar 
objects is eerie. I would be glad if you could confirm this or tell me what I'm 
doing wrong.

Situation: A JCR property "date" contains a date which was entered via a date 
field ("time" set to false). It is stored correctly in the repository converted 
to UTC:

  <sv:property sv:name="date" sv:type="Date">
    <sv:value>2011-04-04T22:00:00.000Z</sv:value>
  </sv:property>

Now I read this property into a Calendar object:

Calendar date = NodeDataUtil.getDate(content, "date", null);

When I print this object, I get:

date: 
java.util.GregorianCalendar[time=1301954400000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=2,DAY_OF_MONTH=4,DAY_OF_YEAR=94,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=10,HOUR_OF_DAY=22,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0]

No surprises so far. Also when I output it with a SimpleDateFormat object with 
pattern "yyyy-MM-dd HH:mm:ss z" things still look fine (except that I did not 
know that the default time zone is applied automatically):

2011-04-05 00:00:00 CEST

But then, when I try to get the start of the month, things get weird:

            date.set(Calendar.DATE, 1);
            date.set(Calendar.HOUR_OF_DAY, 0);
            date.set(Calendar.MINUTE, 0);
            date.set(Calendar.SECOND, 0);
            date.set(Calendar.MILLISECOND, 0);

No I get:

2011-04-01 02:00:00 CEST

which is of course not what I wanted. Even worse when the date should happen to 
be on the first of the month -> then you'll end up more than a month off target.

However when I set the TimeZone of the date object I get from NodeDataUtil 
explicitly to the default timezone I get the expected result:

2011-04-01 00:00:00 CEST

My question / suggestion now: Wouldn't it make sense to set the TimeZone of the 
Calendar objects returned from NodeData(Utils) per default to the default 
timezone because most likely this was also the timezone they were created in?

-will


----------------------------------------------------------------
For list details see
http://www.magnolia-cms.com/home/community/mailing-lists.html
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------





----------------------------------------------------------------
For list details see
http://www.magnolia-cms.com/home/community/mailing-lists.html
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------

Reply via email to