You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Gokul Balakrishnan (JIRA)" <ji...@apache.org> on 2013/04/18 11:45:15 UTC

[jira] [Updated] (AXIS2-5512) Incorrect ConverterUtil date, datetime conversion from strings

     [ https://issues.apache.org/jira/browse/AXIS2-5512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gokul Balakrishnan updated AXIS2-5512:
--------------------------------------

    Affects Version/s: 1.6.0
    
> Incorrect ConverterUtil date, datetime conversion from strings
> --------------------------------------------------------------
>
>                 Key: AXIS2-5512
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5512
>             Project: Axis2
>          Issue Type: Bug
>          Components: adb
>    Affects Versions: 1.6.0
>         Environment: Found to be present in Linux Mint 14 and Solaris 10.
>            Reporter: Gokul Balakrishnan
>              Labels: ConverterUtil, Date,, DateTime,
>
> Possibly related issue: AXIS2-5458
> The methods convertToDate and convertToDateTime output incorrect values for dates before 1928-01-01. For example, 
> GIVEN ConverterUtil.convertToDate("1900-01-01")
> RESULT is "Sun Dec 31 23:23:24 CST 1899"
> GIVEN ConverterUtil.convertToDate("1929-01-01")
> RESULT is "Tue Jan 01 00:00:00 CST 1929"
> The same issue was observed in convertToDateTime as well.
> Note that the local timezone had to be changed to CST to observe the issue. In the local timezone (IST), the bug could not be observed.
> -----------------------------------------------------------------------------------------------------------------------------------------------------------
> The fix described in AXIS2-5458 did not work, so I had to modify ConverterUtil.convertToDate further and was able to fix this by the following modification. I am not sure whether this will work for all timezones.
> public static Date convertToDate(String source) {
>         // the lexical form of the date is '-'? yyyy '-' mm '-' dd zzzzzz?
>         if ((source == null) || source.trim().equals("")) {
>             return null;
>         }
>         source = source.trim();
>         boolean bc = false;
>         if (source.startsWith("-")) {
>             source = source.substring(1);
>             bc = true;
>         }
>         int year = 0;
>         int month = 0;
>         int day = 0;
>         int timeZoneOffSet = TimeZone.getDefault().getRawOffset();
>         if (source.length() >= 10) {
>             //first 10 numbers must give the year
>             if ((source.charAt(4) != '-') || (source.charAt(7) != '-')){
>                 throw new RuntimeException("invalid date format (" + source + ") with out - s at correct place ");
>             }
>             year = Integer.parseInt(source.substring(0,4));
>             month = Integer.parseInt(source.substring(5,7));
>             day = Integer.parseInt(source.substring(8,10));
>             if (source.length() > 10) {
>                 String restpart = source.substring(10);
>                 if (restpart.startsWith("Z")) {
>                     // this is a gmt time zone value
>                     timeZoneOffSet = 0;
>                 } else if (restpart.startsWith("+") || restpart.startsWith("-")) {
>                     // this is a specific time format string
>                     if (restpart.charAt(3) != ':'){
>                         throw new RuntimeException("invalid time zone format (" + source
>                                 + ") without : at correct place");
>                     }
>                     int hours = Integer.parseInt(restpart.substring(1,3));
>                     int minits = Integer.parseInt(restpart.substring(4,6));
>                     timeZoneOffSet = ((hours * 60) + minits) * 60000;
>                     if (restpart.startsWith("-")){
>                         timeZoneOffSet = timeZoneOffSet * -1;
>                     }
>                 } else {
>                     throw new RuntimeException("In valid string sufix");
>                 }
>             }
>         } else {
>             throw new RuntimeException("In valid string to parse");
>         }
>         Calendar calendar = Calendar.getInstance();
>         calendar.clear();
>         calendar.setLenient(false);
>         calendar.set(Calendar.YEAR, year);
>         //xml month stars from the 1 and calendar month is starts with 0
>         calendar.set(Calendar.MONTH, month - 1);
>         calendar.set(Calendar.DAY_OF_MONTH, day);
>        
>        //BEGIN MODIFICATION
>         if(source.length() >10 ){
>             calendar.set(Calendar.ZONE_OFFSET, timeZoneOffSet);
>             calendar.get(Calendar.ZONE_OFFSET);
>             calendar.set(Calendar.DST_OFFSET, 0);
>         }
>         //END MODIFICATION
>         calendar.getTimeInMillis();
>         if (bc){
>             calendar.set(Calendar.ERA, GregorianCalendar.BC);
>         }
>         return calendar.getTime();
>     }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org