question: public static Date stringToDate ( String strDate ) throws ParseException { int [ ] diffTime = null ; boolean plusTime = true ; int idxT = strDate . indexOf ( 'T' ) ; if ( idxT == - 1 ) { throw new ParseException ( "Invalid Date Format" , 0 ) ; } int idxDiffUTC = strDate . indexOf ( '-' , idxT ) ; if ( idxDiffUTC == - 1 ) { idxDiffUTC = strDate . indexOf ( '+' , idxT ) ; plusTime = false ; } if ( idxDiffUTC != - 1 ) { diffTime = getDiffTime ( strDate , idxDiffUTC ) ; strDate = strDate . substring ( 0 , idxDiffUTC ) ; } char lastChar = strDate . charAt ( strDate . length ( ) - 1 ) ; if ( ( lastChar == 'z' ) || ( lastChar == 'Z' ) ) { strDate = strDate . substring ( 0 , strDate . length ( ) - 1 ) ; } return createDate ( strDate , diffTime , plusTime ) ; }
target:  Returns date that is represented by a string. It uses the following representation of date. yyyy-MM-DD'T'hh:mm:ss based on the following definition of "dateTime" attribute in XML schema which can be found at http://www.w3.org/TR/xmlschema-2/#dateTime. A single lexical representation, which is a subset of the lexical representations allowed by [ISO 8601], is allowed for dateTime. This lexical representation is the [ISO 8601] extended format CCYY-MM-DDThh:mm:ss where "CC" represents the century, "YY" the year, "MM" the month and "DD" the day, preceded by an optional leading "-" sign to indicate a negative number. If the sign is omitted, "+" is assumed. The letter "T" is the date/time separator and "hh", "mm", "ss" represent hour, minute and second respectively. Additional digits can be used to increase the precision of fractional seconds if desired i.e the format ss.ss... with any number of digits after the decimal point is supported. The fractional seconds part is optional; other parts of the lexical form are not optional. To accommodate year values greater than 9999 additional digits can be added to the left of this representation. Leading zeros are required if the year value would otherwise have fewer than four digits; otherwise they are forbidden. The year 0000 is prohibited. The CCYY field must have at least four digits, the MM, DD, SS, hh, mm and ss fields exactly two digits each (not counting fractional seconds); leading zeroes must be used if the field would otherwise have too few digits. This representation may be immediately followed by a "Z" to indicate Coordinated Universal Time (UTC) or, to indicate the time zone, i.e. the difference between the local time and Coordinated Universal Time, immediately followed by a sign, + or -, followed by the difference from UTC represented as hh:mm (note: the minutes part is required). See ISO 8601 Date and Time Formats ('D) for details about legal values in the various fields. If the time zone is included, both hours and minutes must be present. For example, to indicate 1:20 pm on May the 31st, 1999 for Eastern Standard Time which is 5 hours behind Coordinated Universal Time (UTC), one would write: 1999-05-31T13:20:00-05:00.