Anyone help out there?
If I have this:
<LocalStartTime>2009-02-26T19:10:00</LocalStartTime>
Why does Axis2 returns one hour more during daylight savings (20:10 instead of
19:10)?
Shouldn't return always the same date?
Cheers!
Felix
-----Original Message-----
From: Felix Castanar [mailto:[email protected]]
Sent: Friday, 27 February 2009 12:52 PM
To: [email protected]
Subject: Daylight savings problem in Australia
Hi,
I'm in Sydney (Australia) where actually there is daylight savings (DST).
The problem I have is the following:
I'm accessing a web service server (in Australia) which sends the following:
<LocalStartTime>2009-02-26T19:10:00</LocalStartTime>
But the response object (generated using Axis2 1.4.1) creates a Calendar object
that is equivalent to:
2009-02-26 20:10:00
(so it added one hour to what it was sent)
Since this conversion was working in Axis2 1.0 I investigated the issue.
This is the calendar object returned by Axis2 1.0 (please note the value for the
last field: DST_OFFSET=3600000)
java.util.GregorianCalendar[time=1235635800000,areFieldsSet=true,areAllFieldsSet=true,
lenient=true,zone=sun.util.calendar.ZoneInfo[id="Australia/Sydney",offset=36000000,dstSavings=3600000,
useDaylight=true,transitions=142,lastRule=java.util.SimpleTimeZone[id=Australia/Sydney,offset=36000000,
dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=1,startDayOfWeek=1,
startTime=7200000,startTimeMode=1,endMode=3,endMonth=3,endDay=1,endDayOfWeek=1,endTime=7200000,
endTimeMode=1]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2009,MONTH=1,
WEEK_OF_YEAR=9,WEEK_OF_MONTH=4,DAY_OF_MONTH=26,DAY_OF_YEAR=57,DAY_OF_WEEK=5,
DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=7,HOUR_OF_DAY=19,MINUTE=10,SECOND=0,MILLISECOND=0,
ZONE_OFFSET=36000000,DST_OFFSET=3600000]
Whereas the same Calendar object returned by Axis2 1.4.1 returns:
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=false,
lenient=true,zone=sun.util.calendar.ZoneInfo[id="Australia/Sydney",offset=36000000,dstSavings=3600000,
useDaylight=true,transitions=142,lastRule=java.util.SimpleTimeZone[id=Australia/Sydney,offset=36000000,
dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=9,startDay=1,startDayOfWeek=1,
startTime=7200000,startTimeMode=1,endMode=3,endMonth=3,endDay=1,endDayOfWeek=1,endTime=7200000,
endTimeMode=1]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=?,YEAR=2009,MONTH=1,
WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=26,DAY_OF_YEAR=?,DAY_OF_WEEK=?,
DAY_OF_WEEK_IN_MONTH=?,AM_PM=?,HOUR=?,HOUR_OF_DAY=19,MINUTE=10,SECOND=0,MILLISECOND=0,
ZONE_OFFSET=36000000,DST_OFFSET=0]
Note the last field for this version: DST_OFFSET=0
I dig down the source code till I found the method responsible for the conversion from
"2009-02-26T19:10:00" to the Calendar object.
This method is "public static Calendar convertToDateTime(String source) " in
the class org.apache.axis2.databinding.utils.ConvertUtils
This method explicitly sets DST_OFFSSET=0 regardless the TimeZone being in DST or not, so
for the entry "2009-02-26T19:10:00" I will get one extra added in DST but the
correct time when DST finishes (I already tested it changing my computer's clock).
I'm aware that JIRA issue 3916
(https://issues.apache.org/jira/browse/AXIS2-3916) introduced the code where
DST_OFFSET is set always to 0.
So...
a) This is still a problem and the issue 3916 should be reopened
b) The web service should be sending the dates in a way we get the right time regardless
of the DST. Any suggestion how? (AFAIK "2009-02-26T19:10:00" is the correct way)
It would be great if someone could put some light here.
Thanks
Felix