axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Castanar <Felix.Casta...@hyro.com>
Subject Daylight savings problem in Australia
Date Fri, 27 Feb 2009 01:52:16 GMT
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







Mime
View raw message